一、SSH加密方式
SSH采用的是”非對稱密鑰系統”,即耳熟能詳的公鑰私鑰加密系統,其安全驗證又分為兩種級別。
1. 基於口令的安全驗證
這種方式使用用戶名密碼進行聯機登錄,一般情況下我們使用的都是這種方式。整個過程大致如下:
(1)客戶端發起連接請求。
(2)遠程主機收到用戶的登錄請求,把自己的公鑰發給客戶端。
(3)客戶端接收遠程主機的公鑰,然后使用遠程主機的公鑰加密登錄密碼,緊接着將加密后的登錄密碼連同自己的公鑰一並發送給遠程主機。
(4)遠程主機接收客戶端的公鑰及加密后的登錄密碼,用自己的私鑰解密收到的登錄密碼,如果密碼正確則允許登錄,到此為止雙方彼此擁有了對方的公鑰,開始雙向加密解密。
PS:當網絡中有另一台冒牌服務器冒充遠程主機時,客戶端的連接請求被服務器B攔截,服務器B將自己的公鑰發送給客戶端,客戶端就會將密碼加密后發送給冒牌服務器,冒牌服務器就可以拿自己的私鑰獲取到密碼,然后為所欲為。因此當第一次鏈接遠程主機時,在上述步驟的第(3)步中,會提示您當前遠程主機的”公鑰指紋”,以確認遠程主機是否是正版的遠程主機,如果選擇繼續后就可以輸入密碼進行登錄了,當遠程的主機接受以后,該台服務器的公鑰就會保存到 ~/.ssh/known_hosts文件中。
2. 基於密匙的安全驗證
這種方式你需要在當前用戶家目錄下為自己創建一對密匙,並把公匙放在需要登錄的服務器上。當你要連接到服務器上時,客戶端就會向服務器請求使用密匙進行安全驗證。服務器收到請求之后,會在該服務器上你所請求登錄的用戶的家目錄下尋找你的公匙,然后與你發送過來的公匙進行比較。如果兩個密匙一致,服務器就用該公匙加密“質詢”並把它發送給客戶端。客戶端收到“質詢”之后用自己的私匙解密再把它發送給服務器。與第一種級別相比,第二種級別不需要在網絡上傳送口令。
PS:簡單來說,就是將客戶端的公鑰放到服務器上,那么客戶端就可以免密碼登錄服務器了,那么客戶端的公鑰應該放到服務器上哪個地方呢?默認為你要登錄的用戶的家目錄下的 .ssh 目錄下的 authorized_keys 文件中(即:~/.ssh/authorized_keys)
二、配置免密登錄
1、背景介紹
目標:A免密登錄B
系統:A為win7,B為centos7.0(vitualbox)
工具:vagrant,ssh(git自帶,需要配置環境變量)
背景簡介:我在windows7上面使用vagrant將網上的box生成了虛擬機,當然中間使用了virtualbox作為中間工具,但是每次使用vagrant打開虛擬機都需要使用密碼,很麻煩,所以想配置免密登錄,但是配置完成之后還是不行。
2、使用第二種驗證方式配置
2.1 在windows上面生成密鑰和公鑰
在任何地方使用ssh-keygen -t -rsa
該命令表示的是使用rsa算法生成公鑰和私鑰,當然算法還有dsa算法也可以用。
此步驟在提示Enter file in which to save the key(xxxx)的時候,需要提供路徑和文件,不然會生成不成功,此后會提示輸入密碼,可以直接回車跳過
同時,建議將文件生成在用戶目錄下的.ssh文件夾下面
生成完成之后在輸入的文件路徑下查看
2.2 將私鑰添加到SSH agent中
因為默認只讀取id_rsa,為了讓SSH識別新的私鑰,需將其添加到SSH agent中ssh-add ~/.ssh/id_rsa
如果出現Could not open a connection to your authentication agent的錯誤,試着用一下的命令:
ssh-agent bash
ssh-add ~/.ssh/id_rsa
2.3 拷貝公鑰到linux
1)登錄linux,查看當前用戶,我的用戶為root,所以直接進入root目錄,當然也可以直接使用cd ~來進入當前用戶目錄,如果客戶機多用戶,建議查看下當前登錄的用戶。
2)確定linux下面是否有ssh,如果沒有則執行yum/apt-get install ssh
3)在用戶目錄下創建.ssh目錄
4)拷貝win7生成的公鑰到linux下剛才創建的.ssh里面,並且重命名為authorized_keys
5)修改.ssh權限
chmod 700 -R .ssh修改目錄權限,這點很重要, 必須修改, 否則會配置不成功。
三、問題解決
1、vagrant登錄用戶配置
本以為大功告成,可以免密登錄了,但是不對,我啟動vagrant的時候,出現了SSH auth method: password
這不還是要密碼么。。。檢查配置,原來我在使用linux的時候,使用了root登錄,並進行了配置,所以導致需要密碼
所以注釋掉其中兩行,依然可以root登錄。
2、私鑰的使用
當我重啟虛擬機,看到default: SSH auth method: private key時,一頓雞凍,以為終於搞定了,但是接下來就尷尬了。。。
媽蛋,這什么情況,不是就卡死了么。。。
仔細看告警,是權限授權失敗,跟我們主機相關的權限就只有公鑰和私鑰。這種長時間無法通過vagrant ssh登陸的問題可能會由於ssh認證機制導致失敗。vagrant默認采用key登錄,但所用的KeyPair可能沒有正常配置。
使用vagrant ssh-config查看
看起來好像沒什么不對,因為私鑰是有的,但是一想,私鑰我沒配置過,這個是在我建立box的時候有的,那時候還沒在本機生成過公鑰和私鑰呢,所以果斷把剛才在本機生成的私鑰拷貝過來,並且改名為private_key,覆蓋掉 f:/DownLoad/Vagrant/Box/centos7.0/.vagrant/machines/default/virtualbox/private_key
3、驗證
上面的步驟完成之后,使用vagrant up啟動虛擬機,然后使用vagrant ssh能順利登錄虛擬機則表示成功
注:如果環境不是使用的vagrant登錄虛擬機,則只需看一二節即可,如果是其他ssh工具則需要看情況配置ssh服務或者私鑰。