標籤:密碼 為什麼 金鑰組 src 設定 pen 指令碼 輸入密碼 rsync
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 [email protected]:folder/,或者類似的方式來傳遞,當你輸入這條命令後,會讓你輸入登入主機
B的密碼,當然如果你只使用這條命令一次倒還好,假如你是在指令碼裡使用N次這條命令,那麼你需要輸N次密碼,豈不抓狂。這個時候,就是代理轉寄登場
的時候了。
什麼意思呢?你不是已經登入了主機A嗎,主機A不可以有一對公開金鑰和私密金鑰嗎,那麼我們只需要如此如此:
(a)將主機A下的你的帳號的公開金鑰拷貝到主機B的那個authrized_keys檔案中,主機A下你的帳號的公開金鑰就是~/.ssh/id_rsa.pub。這樣做也就是表明:我想在主機
A上通過密鑰登入主機B。
(b)在xshell中設定:工具 ->Xagent->設定->勾上確認ssh代理轉寄
這樣就可以不用輸入密碼就能運行上面的命令了。
4.好處
好處還用多說嗎~
windows下使用密鑰登入Linux及xshell代理轉寄