1.密鑰登錄原理
一般我們使用xshell訪問遠程主機(Linux主機)時,都是先請管理員給我們開一個賬戶,即為我們設置一個一個用戶名和對應的密碼,然后我們就可以使用下面的方式登錄到遠程主機了:

在這種情況下,我們使用的是上面密碼登錄,也就是說只要知道你這個賬號及密碼的人都可以在任何地方登錄到遠程主機,因此安全性較低。
使用密鑰登錄則不同,他使用的是上圖中的public key方式登錄,這種方式涉及到一個加密算法RSA,這個算法先生成一個密鑰對(公鑰和私鑰),
我們提供自己的公鑰給遠程主機,在登錄的時候用私鑰去認證,私鑰存在本地(你自己的工作電腦上),並且在認證的時候,還需要用戶輸入私鑰
的加密密碼,其實就是一個雙重保護:首先需要這個私鑰文件,其次還需要知道使用私鑰的密碼。顯然這個私鑰文件是比較安全的,所以即使你使用
私鑰的密碼被別人知道了,它沒有這個私鑰文件也是白搭。so,說了一大堆就是一句話:這種方式忒安全嘞~
2.配置
使用密鑰登錄需要走以下幾個步驟:
(a)在本地生成一個密鑰對。使用xshell即可生成。xshell的工具->用戶密鑰管理者->生成->選擇RSA,2048位->輸入文件名和一個密碼->完成,簡單到爆。
(b)導出你的公鑰為一個文件,這個東西是要發給管理員的,他需要把你的公鑰放到遠程主機,具體是這個文件:~/.ssh/authrized_keys,導出方法
為:工具->用戶密鑰管理者->找到你剛才輸入和文件名->選擇一個目錄導出,然后把這個文件發給管理員,或者直接用記事本打開,把里面的內容發給他。
當然也許你只是想自己試試,那么你自己就是管理員,那么你還需要做更多的工作:
(c)因為你是管理員,意味着你已經擁有一台linux主機了,不管你是虛擬機,還是物理機。首先用root賬號給自己建立一個普通用戶(直接用root也行),
在這個用戶的家目錄下執行命令:ssh-keygen -t rsa,會生成一個隱藏目錄(.ssh)和里面的文件,進入.ssh目錄,創建一個文件authrized_keys,然后
將你的公鑰串拷貝到該文件的中(如果是多個人使用一個賬號登錄這台主機,那么authrized_keys中可能不止一個公鑰串,別把之前的內容覆蓋了)。
(d)你以為你萬事大吉了,立馬想試試使用xshell登錄看看,其實你還會遇到如下坑: (i)你是新裝的系統,還沒有安裝ssh服務,使用xshell還是連不上,
而且連賬號密碼都不讓你輸,就給你報錯了,你需要在遠程主機上安裝ssh服務:sudo apt-get install openssh-server。(ii)如果你想使用拖拽的方式將
公鑰文件傳到遠程主機上,你還需要安裝sz和rz:sudo apt-get install lrzsz。
這下應該可以用密鑰登錄了!試試看!
3.代理轉發
為什么需要代理轉發呢,當然是在比較復雜的場景中,如你在你的windows主機上工作,然后用xshell登錄到遠程主機A,並想在主機A上傳遞一個文件到
另一台遠程主機B,那么毫無疑問你想用:rsync -e ssh -vz file username@ip:folder/,或者類似的方式來傳遞,當你輸入這條命令后,會讓你輸入登錄主機
B的密碼,當然如果你只使用這條命令一次倒還好,假如你是在腳本里使用N次這條命令,那么你需要輸N次密碼,豈不抓狂。這個時候,就是代理轉發登場
的時候了。
什么意思呢?你不是已經登錄了主機A嗎,主機A不可以有一對公鑰和私鑰嗎,那么我們只需要如此如此:
(a)將主機A下的你的賬號的公鑰拷貝到主機B的那個authrized_keys文件中,主機A下你的賬號的公鑰就是~/.ssh/id_rsa.pub。這樣做也就是表明:我想在主機
A上通過密鑰登錄主機B。
(b)在xshell中設置:工具 ->Xagent->設置->勾上確認ssh代理轉發
這樣就可以不用輸入密碼就能運行上面的命令了。
4.好處
好處還用多說嗎~
