ssh免密碼登陸及其原理
ssh 無密碼登錄要使用公鑰與私鑰。linux下可以用用ssh-keygen生成公鑰/私鑰對,下面我以CentOS為例。
有機器A(192.168.1.155),B(192.168.1.181)。現想A通過ssh免密碼登錄到B。
1.在A機下生成公鑰/私鑰對。
直接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文件則創建這個文件夾和文件先)
chenlb@192.168.1.181's password:
id_rsa.pub 100% 223 0.2KB/s 00:00
由於還沒有免密碼登錄的,所以要輸入密碼。
3.B機把從A機復制的id_rsa.pub添加到.ssh/authorzied_keys文件里。
[chenlb@B ~]$ chmod 600 .ssh/authorized_keys
authorized_keys的權限要是600。
4.A機登錄B機。
The authenticity of host '192.168.1.181 (192.168.1.181)' can't be established.
RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.181' (RSA) to the list of known hosts.
Last login: Thu Jul 3 09:53:18 2008 from chenlb
[chenlb@B ~]$
第一次登錄是時要你輸入yes。
現在A機可以無密碼登錄B機了。
小結:登錄的機子可有私鑰,被登錄的機子要有登錄機子的公鑰。這個公鑰/私鑰對一般在私鑰宿主機產生。上面是用rsa算法的公鑰/私鑰對,當然也可以用dsa(對應的文件是id_dsa,id_dsa.pub)
想讓A,B機無密碼互登錄,那B機以上面同樣的方式配置即可。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用SSH 協議可以有效防止遠程管理過程中的信息泄露問題。
從客戶端來看,SSH提供兩種級別的安全驗證:
1、基於口令的驗證
只要知道帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但缺點是:不能保證你正在連接的服務器就是你想連接的服務器。以下是我畫了的登錄驗證流程:
當第一次鏈接遠程主機時,會提示您當前主機的”公鑰指紋”,詢問您是否繼續,如果選擇繼續后就可以輸入密碼進行登錄了,當遠程的主機接受以后,該台服務器的公鑰就會保存到~/.ssh/known_hosts文件中。
2、基於密鑰的驗證
這種驗證的前提是客戶端需要生成一對密鑰,將公鑰放到需訪問的遠程服務器。這種驗證比上一種的好處是,不能仿冒真正的服務器,因為要仿冒必須拿到客戶端生成的公鑰。缺點就是驗證等待過程稍長些。
如何生成密鑰:
1、在客戶端打開終端,執行ssh-keygen,該命令會默認在~/.ssh/目錄下創建id_rsa、id_rsa.pub兩個文件,分別為您的公鑰和私鑰。
2、將公鑰id_rsa.pub文件拷貝到服務器端的~/.ssh/authorized_keys文件中,有三種方法:
- 通過scp拷貝:
- 例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys #可選參數-P代表指定用端口號22
- 通過ssh-copyid程序:
- 例:ssh-copy-id user@host #此種方式簡單,不需追加改文件名,但不能指定端口號,默認以22端口
- 通過cat方法:
- 例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.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要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。