ssh免密碼登陸及其原理


ssh免密碼登陸及其原理

 

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

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

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

[chenlb@A ~]$ 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文件則創建這個文件夾和文件先)

[chenlb@A ~]$ scp .ssh/id_rsa.pub chenlb@192.168.1.181:/home/chenlb/id_rsa.pub 
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 ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[chenlb@B ~]$ chmod 600 .ssh/authorized_keys


authorized_keys的權限要是600

4.A機登錄B機。

[chenlb@A ~]$ 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
[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’

----------------------------------------------------------------------------------------------------

免密碼登錄原理

ssh免密碼登錄原理圖
圖解,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要做一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM