1. SSH遠端連接配接的原理
SSH遠端連接配接中,SSH2協定分為3個協定:傳輸層協定,認證協定,連接配接協定,而SSH1中由單個協定提供密鑰交換,身份認證,加密的功能。傳輸層協定主要提供密鑰交換與服務端認證的功能,認證協定是提供用戶端認證功能,用戶端認證主要有基于密碼認證和密鑰認證,連接配接協定主要是提供遠端執行指令功能。而在此我們主要讨論SSH遠端連接配接的原理,也就是用戶端認證的兩種方式:
工作流程如下:(此處的公鑰密鑰為一對,公鑰加密隻能由相應私鑰進行解密)
⑴伺服器端開啟ssh服務,在端口22監聽用戶端請求
方式一①使用者名密碼驗證方式(密碼認證)
⑵用戶端發出ssh請求,伺服器把自己的rsa key公鑰發送給使用者
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXwkFRNlXSU5UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN2kDNxcjMxAzMyYDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
而此rsa key會被記錄到伺服器端的~/.ssh/known_hosts中,下次遠端登入伺服器就不會出現以上的提示資訊
⑶使用者根據伺服器發來的公鑰對密碼進行加密
⑷加密後的資訊傳回到伺服器,伺服器用自己的私鑰解密,若密碼正确,則使用者登入成功。
②基于密鑰的登陸方式(公鑰加密)
⑴首先在用戶端生成一對密鑰(ssh-keygen)ssh-keygen -t (指定生成密鑰類型,rsa,dsa,ecdsa等) id_rsa檔案:儲存密鑰 id_rsa.pub:儲存公鑰
⑵将用戶端的公鑰ssh-copy-id拷貝到服務端
在伺服器端檢視是否拷貝成功
⑶當用戶端再次發送一次連接配接請求,包括ip,使用者名
⑷服務端接收到用戶端的請求後,在authorized_keys(已授權的用戶端公鑰)中尋找,如果有響應的ip和使用者名就生成一串随機的字元串,例如:qwer
⑸服務端使用用戶端拷貝過來的公鑰對其進行加密并發送給用戶端
⑹得到用戶端發送過來的資訊後,用戶端使用私鑰進行解密,然後将解密後的字元串發送給服務端
⑺服務端得到用戶端發送過來的字元串後,跟之前的字元串進行對比,如果一緻就允許免密碼登入
測試:
2. 用xshel連接配接ubuntu系統的步驟,以及遇到問題的解決方法
故障:ssh服務由于是自己自學并且安裝,是以對它完全是一個從無到有的認識,是以最初不知道它是一個需要提前安裝的服務,隻是在網上搜尋了SSH遠端連接配接的原理,知道了用戶端和伺服器的一個密碼交換過程,是以通過在網上不斷收集資料的過程,ssh連接配接的過程逐漸清晰,在安裝包,建立連接配接,登入使用者,傳送檔案的各個過程中都遇到了各種各樣的麻煩
解決方法:就是堅決不放棄,網際網路上什麼資料都有,前人學習的寶貴經驗财富可一一搜尋了解,最終能夠摸索出一套可行的方案出來
Step1:使用apt-get安裝SSH服務
①用dpkg-l | grep -i “ssh” 檢視ssh服務的安裝資訊,從圖中可以看到已經有用戶端和伺服器兩個檔案。(
障礙:之前的操作步驟找不到了,該圖其實為安裝好ssh之後的安裝資訊檢視,在安裝好之前其實隻有前三項,是以是不齊全的,
解決方案:使用之前學過的apt-get install指令成功安裝ssh服務)
②安裝 openssh-server(
障礙:知道使用ssh,必須要先安裝好它,但是由于對ssh了解欠缺,是以不知道應該使用apt-get install指令安裝什麼,是以上網各處搜尋,
解決方案:終于在中國大學mooc的一堂課中有提到安裝openssh-server這個服務)
Step2:啟動和停止SSH服務
①/etc/init.d/ssh start(stop/restart) 可以控制ssh服務的啟動停止和重新開機(
障礙:剛安裝好ssh服務我還以為可以直接打開xshell5進行連接配接,結果打開xshell之後也是一頭霧水,建立連接配接裡面不知道寫什麼,更不用說連接配接這回事了。
解決方案:
以上指令可以實作ssh服務的三個操作,其實隻需要用start打開就可以,但是為了多體驗ssh的操作,我找到了其他兩個操作,stop和restart)
②netstat -a | grep ssh 指令檢視程序,看端口是否在監聽(
障礙:user使用者鑰匙在監聽中/run/user/1000/keyring/ssh,沒有看到root使用者
解決方案:之後避免使用root使用者)
Step3:設定SSH的配置檔案sshd_config(
障礙:在sshd_config檔案中可以看到authentication下有一個Permitrootlogin之前顯示的是without-password,允許root使用者登入但是不能使用密碼登陸
解決方法:改為yes)
Step4:使用xshell連接配接到ubuntu系統
①用ifconfig ens33 192.168.1.100指令修改ens33的位址為192.168.1.100(
障礙:之前在網上搜查的資料沒有這一步,它們是直接寫的127.0.0.1,然後在xshell中直接設定進行連接配接,最後是能夠連接配接建立但是不會彈出使用者登入視窗,
解決方法:另尋它路,在别人的部落格裡面看到可以通過ifconfig設定ens33的内部位址,在xshell中用該位址進行連接配接)
②将虛拟機的網絡連接配接模式改為NAT模式(我選擇用NAT模式連接配接)
③在虛拟網絡編輯器添加一個VMnet8(NAT模式對應VMnet8),設定子網IP為192.168.1.0
④NAT設定内容如下
⑤在Xshell 5中選擇SSH協定,主機位址設為192.168.1.100(之前設定的ens33的位址)預設端口22号
⑥點選确認後出現下列視窗
⑦點選确認後出現下列登陸視窗(輸入使用者名和密碼)(
障礙:初見該登陸框的時候,我第一個想到的是用root使用者名,密碼就為linux下使用者的密碼登陸,結果顯示拒絕密碼,後來我換成了普通user使用者,使用者密碼依然還是之前的那個,但是最後還是拒絕我的密碼輸入。
解決方法:在網上搜尋為什麼shell登入使用者拒絕登入密碼,然後在嵌入式愛好者網站中看到所不能用root登陸,用普通使用者進行登陸,是以我在ubuntu中把root使用者用sudo 指令退回了普通使用者,再在xshell中用普通使用者進行登陸最終連接配接成功建立。)
⑧登陸成功後連接配接成功結果圖如下
Step5:安裝lrzsz包(
障礙:安裝lrszs包的時候,不知怎麼的沒網了,連接配接不上網絡,點不開網頁,是以apt-get install指令沒有用
解決方案:在網上找網絡連接配接的設定,以太網連接配接設定,wifi連接配接設定,在windows的管理者指令中通過ipconfig all看到了以太網ipv4的位址和無線連接配接模式下的ipv4位址,把這兩個配置好在電腦上,結果以太網連接配接上但是不能用,是以換成wifi連接配接模式,一直連接配接不上,索性将所有的設定改為橋接模式,一下子就聯網了,使用apt-get install指令安裝lrzsz)
Step6:rz指令将2016070525傳到ubuntu系統,ubuntu系統内将上述文檔重命名為自己名字拼音,sz指令傳到windows系統中
(障礙:在安裝好lrzsz之後,我在Ubuntu系統中輸入rz指令,準備接受電腦桌面的檔案,但是出現的是一串亂碼,并且這串亂碼的數字在慢慢地移動,但是始終不像網上那樣會彈出視窗來。
解決方案:找了好幾份别人通過lrzsz來傳送和接受檔案的執行個體,發現大家都是在xshell中輸入sz和rz指令進行的檔案下載下傳和上傳)
①将2016070525傳到ubuntu系統
②重命名為qiuyanru.txt
③sz指令将 qiuyanru.txt檔案傳送到windows系統