1. 程式人生 > >ssh免密碼登陸及其原理

ssh免密碼登陸及其原理

then 文件中 id_rsa 遠程 wan 技術分享 finger 應用層 指紋

ssh 無密碼登錄要使用公鑰與私鑰。linux下可以用用ssh-keygen生成公鑰/私鑰對,下面我以CentOS為例。

有機器A(192.168.1.155),B(192.168.1.181)。現想A通過ssh免密碼登錄到B。

1.在A機下生成公鑰/私鑰對。

[[email protected] ~]$ ssh-keygen -t rsa -P ‘‘

直接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文件則創建這個文件夾和文件先)

[[email protected] ~]$ scp .ssh/id_rsa.pub [email protected]:/home/chenlb/id_rsa.pub
[email protected]‘s password:
id_rsa.pub 100% 223 0.2KB/s 00:00


由於還沒有免密碼登錄的,所以要輸入密碼。

3.B機把從A機復制的id_rsa.pub添加到.ssh/authorzied_keys文件裏。

[[email protected] ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[[email protected] ~]$ chmod 600 .ssh/authorized_keys


authorized_keys的權限要是600

4.A機登錄B機。

[[email protected] ~]$ ssh 192.168.1.181
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
[[email protected] ~]$


第一次登錄是時要你輸入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 [email protected]:~/authorized_keys #可選參數-P代表指定用端口號22
  • 通過ssh-copyid程序:
    •  例:ssh-copy-id [email protected] #此種方式簡單,不需追加改文件名,但不能指定端口號,默認以22端口
  • 通過cat方法:
    •  例:cat ~/.ssh/id_rsa.pub | ssh -p 22 [email protected] ‘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要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。

ssh免密碼登陸及其原理