ssh 無密碼登陸要使用公鑰與私鑰。linux下能夠用用ssh-keygen生成公鑰/私鑰對,下面我以CentOS爲例。
有機器A(192.168.1.155),B(192.168.1.181)。現想A經過ssh免密碼登陸到B。
1.在A機下生成公鑰/私鑰對。linux
直接ssh-keygen而後三次回車就能夠了。
-P表示密碼,-P '' 就表示空密碼,也能夠不用-P參數,這樣就要三車回車,用-P就一次回車。
它在/home/chenlb下生成.ssh目錄,.ssh下有id_rsa和id_rsa.pub。
2.把A機下的id_rsa.pub複製到B機下,在B機的.ssh/authorized_keys文件裏,我用scp複製。(若是B機器沒有.ssh和authorized_keys文件則建立這個文件夾和文件先)算法
因爲尚未免密碼登陸的,因此要輸入密碼。
3.B機把從A機複製的id_rsa.pub添加到.ssh/authorzied_keys文件裏。安全
authorized_keys的權限要是600。
4.A機登陸B機。服務器
第一次登陸是時要你輸入yes。
如今A機能夠無密碼登陸B機了。
小結:登陸的機子可有私鑰,被登陸的機子要有登陸機子的公鑰。這個公鑰/私鑰對通常在私鑰宿主機產生。上面是用rsa算法的公鑰/私鑰對,固然也能夠用dsa(對應的文件是id_dsa,id_dsa.pub)
想讓A,B機無密碼互登陸,那B機以上面一樣的方式配置便可。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------網絡
SSH 爲創建在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。ssh
從客戶端來看,SSH提供兩種級別的安全驗證:加密
一、基於口令的驗證server
只要知道賬號和口令,就能夠登陸到遠程主機。全部傳輸的數據都會被加密,但缺點是:不能保證你正在鏈接的服務器就是你想鏈接的服務器。如下是我畫了的登陸驗證流程:blog
當第一次連接遠程主機時,會提示您當前主機的」公鑰指紋」,詢問您是否繼續,若是選擇繼續後就能夠輸入密碼進行登陸了,當遠程的主機接受之後,該臺服務器的公鑰就會保存到~/.ssh/known_hosts文件中。ci
二、基於密鑰的驗證
這種驗證的前提是客戶端須要生成一對密鑰,將公鑰放到需訪問的遠程服務器。這種驗證比上一種的好處是,不能仿冒真正的服務器,由於要仿冒必須拿到客戶端生成的公鑰。缺點就是驗證等待過程稍長些。
如何生成密鑰:
一、在客戶端打開終端,執行ssh-keygen,該命令會默認在~/.ssh/目錄下建立id_rsa、id_rsa.pub兩個文件,分別爲您的公鑰和私鑰。
二、將公鑰id_rsa.pub文件拷貝到服務器端的~/.ssh/authorized_keys文件中,有三種方法:
----------------------------------------------------------------------------------------------------
圖解,server A免登陸到server B: 1.在A上生成公鑰私鑰。 2.將公鑰拷貝給server B,要重命名成authorized_keys(從英文名就知道含義了) 3.Server A向Server B發送一個鏈接請求。 4.Server B獲得Server A的信息後,在authorized_key中查找,若是有相應的用戶名和IP,則隨機生成一個字符串,並用Server A的公鑰加密,發送給Server A。 5.Server A獲得Server B發來的消息後,使用私鑰進行解密,而後將解密後的字符串發送給Server B。Server B進行和生成的對比,若是一致,則容許免登陸。 總之:A要免密碼登陸到B,B首先要擁有A的公鑰,而後B要作一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。