ssh免密碼登錄及其原理

ssh 無密碼登陸要使用公鑰與私鑰。linux下能夠用用ssh-keygen生成公鑰/私鑰對,下面我以CentOS爲例。

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

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

[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

      從客戶端來看,SSH提供兩種級別的安全驗證:加密

 

一、基於口令的驗證server

 

     只要知道賬號和口令,就能夠登陸到遠程主機。全部傳輸的數據都會被加密,但缺點是:不能保證你正在鏈接的服務器就是你想鏈接的服務器。如下是我畫了的登陸驗證流程:blog

 

 

 

 

      當第一次連接遠程主機時,會提示您當前主機的」公鑰指紋」,詢問您是否繼續,若是選擇繼續後就能夠輸入密碼進行登陸了,當遠程的主機接受之後,該臺服務器的公鑰就會保存到~/.ssh/known_hosts文件中。ci

 

二、基於密鑰的驗證

 

    這種驗證的前提是客戶端須要生成一對密鑰,將公鑰放到需訪問的遠程服務器。這種驗證比上一種的好處是,不能仿冒真正的服務器,由於要仿冒必須拿到客戶端生成的公鑰。缺點就是驗證等待過程稍長些。

 

 

 

 

如何生成密鑰:

 

一、在客戶端打開終端,執行ssh-keygen,該命令會默認在~/.ssh/目錄下建立id_rsa、id_rsa.pub兩個文件,分別爲您的公鑰和私鑰。

 

二、將公鑰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要作一次加密驗證。對於非對稱加密,公鑰加密的密文不能公鑰解開,只能私鑰解開。

相關文章
相關標籤/搜索