閱讀1027 返回首頁    go 阿裏雲


雲服務器 ECS Linux SSH 基於密鑰交換的自動登錄原理簡介及配置說明__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲

,注意:,本文相關配置及說明已在, CentOS 6.5 64 ,位操作係統中進行過測試。其它類型及版本操作係統配置可能有所差異,具體情況請參閱相應操作係統官方文檔。

 

,SSH ,服務可以對所有傳輸的數據進行加密,提供比傳統, ,telnet 服務更高的安全性(更多關於,SSH ,服務的連接交互過程,可以參閱, ,,,雲服務器 ECS Linux SSH ,,連接交互過程簡介,)。而基於密鑰認證的 ,SSH ,自動化登錄,在保障安全性的同時,可以簡化登錄過程,降低運維成本。本文先簡要介紹基於密鑰交換的, ,SSH ,自動登錄的原理,然後對配置方法進行說明。

 

,原理簡介


,SSH,證書認證登錄的基礎是一對唯一匹配密鑰,: ,私鑰,(,private key,)和公鑰(,public key,)。公鑰用於對數據進行加密,而且隻能用於加密。而私鑰隻能對使用所匹配的公鑰,所加密過的數據進行解密。私鑰需要用戶單獨妥善保管。SSH ,客戶端使用私鑰向服務器證明自已的身份。而公鑰是公開的,可以按需將其配置到目標服務器上自己的相應帳號中。

,在進行, ,SSH 登錄認證時,進行私鑰和公鑰協商。如果匹配,則身份得以證明,認證成功,允許登錄。否則,將會繼續使用密碼驗證等其它方式進行登錄校驗。SSH ,證書驗證登錄配置及登錄協商過程,如下證書校驗交互登錄流程示意圖所示:

,各步驟補充說明如下:

生成證書

  1. ,客戶端生成密鑰對。
  2. ,,將公鑰信息寫入目標服務器、目標賬戶的配置文件。該操作隱含表示了客戶端擁有對目標服務器的控製權。

協商交互過程

  1. , ,,客戶端向目標服務器發送登錄請求。在SSH 服務啟用了證書驗證登錄方式後,會優先通過證書驗證方式進行登錄驗證。, 

  2. ,目標服務器根據, ,SSH ,服務配置,在用戶對應目錄及文件中讀取到有效的公鑰信息。
  3. ,目標服務器生成一串隨機數,然後使用相應的公鑰對其加密。

  4. ,目標服務器將加密後的密文發回客戶端。

  5. ,客戶端使用默認目錄或 -,i ,參數指定的私鑰嚐試解密。

  6. ,如果解密失敗,則會繼續嚐試密碼驗證等其它方式進行登錄校驗。如果解密成功,則將解密後的原文信息重新發送給目標服務器。意思類似於: ,“,看,這是這段話的原文。我能讀懂發過來的密文,我擁有服務器的控製權,請讓我登錄。,”

  7. ,,目標服務器對客戶端返回的信息進行比對。如果比對成功,則表示認證成功,客戶端可以登錄。如果對比失敗,則表示認證失敗,則會繼續嚐試密碼驗證等其它方式進行登錄校驗。

 

,自動登錄配置


,生成密鑰對

,SSH ,協議, V1,隻使用, ,RSA ,算法,而, ,SSH ,協議,V2 ,對, ,RSA ,算法和, ,DSA ,算法都支持。目前所有,OpenSSH ,版本都應該對兩種算法都支持。兩種算法的密鑰的生成指令和使用方法相同,本文僅以, ,RSA ,算法為例進行相關說明。

,生成密鑰對的時候,可以按需決定是否設置密碼。但需要注意的是,如果設置了密碼,還需結合 ,ssh-agent ,代理和 ,ssh-add ,配置才能實現自動登錄。同時,相關配置隻對 ,ssh-agent ,啟動的相應 ,shell ,生效,用戶退出後重新登錄時還需重新配置。所以,為簡便起見,本文以常見的、不配置密碼的情況進行說明。

,可以在任意支持環境下生成密鑰對。,Windows ,和, ,Linux ,環境下,配置分別說明如下。

,Windows ,環境下生成密鑰對

,在 ,Windows ,環境下,通常借助各種應用軟件來創建和管理密鑰對。以常見的,NetSarang Xshell,為例,請執行如下步驟創建密鑰對:

  1. ,打開,Xshell,程序。
  2. ,,單擊 工具 ,> 用戶密鑰管理者 ,再點擊 生成
  3. ,,,在打開的密鑰創建向導中,選擇默認的 ,RSA 密鑰算法及密鑰長度(默認, 2048 位)後,點擊, 下一步
  4. ,,,,程序生成密鑰對後,點擊 ,下一步,。
  5. ,,,,,如前麵所述,密鑰加密密碼留空:
  6. 點擊 下一步,會彈出確認信息,點擊 確認。
  7. ,複製或者點擊, ,保存為文件, ,對公鑰信息進行保存。
  8. ,,點擊, ,完成, ,,在, ,用戶密鑰管理者 ,列表中能看到相應的密鑰信息。

,Linux ,環境下生成密鑰對

,在 ,Linux ,環境下,通常使用係統自帶的 ,ssh-keygen ,軟件來創建和管理密鑰對。請執行如下步驟創建密鑰對:

  1. ,以任意具有 ,ssh-keygen ,執行權限的用戶登錄服務器。
  2. ,,使用如下指令,基於 ,rsa ,算法創建密鑰對:
    ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):		        → 默認保存路徑和文件名,可以按需修改。
    Enter passphrase (empty for no passphrase): 	                        → 如前麵所述,不設置密碼,回車確認即可。
    Enter same passphrase again: 						        → 不設置密碼,回車確認即可。
    Your identification has been saved in /root/.ssh/id_rsa.		→ 創建的私鑰文件。
    Your public key has been saved in /root/.ssh/id_rsa.pub.		→ 創建的公鑰文件。
    The key fingerprint is:
    17:b8:0e:76:cb:57:21:3b:f2:bb:8b:a2:42:2b:54:be root@iZ233gr74jvZ
    The key's randomart image is:
    +--[ RSA 2048]----+
    |                 |
    |         .       |
    |        . o .    |
    |   .     . + .   |
    |  o   o S + .    |
    | ... . = = o     |
    |.. ..   + o      |
    |. oE  .  o .     |
    | . ... .. +o     |
    +-----------------+

    ,說明:

  • ,如果 .ssh ,目錄不存在,程序會自動創建。

  • ,生成的密鑰對默認保存在當前用戶家目錄下的 .ssh ,文件夾中,文件名默認為, id_rsa,(私鑰) ,和, id_rsa.pub,(公鑰)。用戶可以按需設置保存路徑和文件名。

,密鑰配置

,生成密鑰對後,進行如下處理:

,私鑰的處理

,私鑰用於信息校驗,請確保安全。可以將私鑰上傳到其它源服務器上,或者直接參閱前述說明創建新的密鑰對。

,公鑰的處理

,公鑰信息需要寫入目標服務器、目標用戶的配置文件中,默認配置文件為對應用戶家目錄下, .ssh ,文件夾中的, ,authorized_keys,,即:

~/.ssh/authorized_keys

,可以複製公鑰信息後,直接通過, ,vi ,等編輯器將其寫入上述文件。或者通過如下指令,在源服務器上配置寫入:

cat ~/.ssh/id_rsa.pub | ssh <用戶名>@<目標服務器IP> 'cat >> ~/.ssh/authorized_keys';

比如:
cat ~/.ssh/id_rsa.pub | ssh root@120.26.38.248 'cat >> ~/.ssh/authorized_keys';

,注意:

  • 該操作由於需要登錄目標服務器才能完成,所以隱含表示了客戶端擁有對目標服務器的控製權。
  • 如果修改了默認的目錄或文件名,則需要同步修改SSH 服務配置文件(默認為/etc/ssh/sshd_config)中的AuthorizedKeysFile 參數,否則會因找不到公鑰信息而導致自動登錄失敗。

,參數與權限檢查確認

,要順利完成自動登錄,還需對,SSH ,服務相關參數及關聯文件、文件夾的權限進行確認或調整。

,SSH ,服務參數設置

,SSH ,服務默認開啟了證書認證支持。編輯 ,SSH ,服務配置文件(默認為,/etc/ssh/sshd_config,),確保如下參數沒有顯示的置為 ,no,。否則,將參數值修改為 ,yes,,或者整個刪除或注釋(在最開頭添加, # ,號)整行配置。比如:

#RSAAuthentication yes
#PubkeyAuthentication yes

,同時,如前麵所述,如果修改了默認的公鑰路徑或文件名,還需確保 ,AuthorizedKeysFile, ,參數值配置的信息與其一致。

,注意,:如果對相關參數做了修改,需要重啟 ,SSH ,服務生效。

,相關權限設置

,SSH ,服務證書驗證方式登錄,對相關目錄和文件的權限有要求。權限配置異常可能會導致登錄失敗。

  • ,.ssh ,目錄的權限配置
    ,使用如下指令,確保 $HOME/.ssh ,目錄隻有所有者才有權寫入:
    chmod 700 ~/.ssh
  • ,authorized_keys ,文件的權限配置
    ,使用如下指令,確保其它用戶對 ,authorized_keys ,文件沒有修改權限:,?
    chmod 600 ~/.ssh/authorized_keys
  • ,進一步安全配置
    ,進一步的安全設置可以將, ,authorized_keys ,文件權限配置為, 400,(其他用戶沒有任何權限),並對其及, .ssh ,目錄添加, ,immutable ,位權限(防止文件被修改):
    chmod 400 ~/.ssh/authorized_keys
    chattr +i ~/.ssh/authorized_keys
    chattr +i ~/.ssh
    

,自動登錄

,完成上述配置後,在客戶端即可免密碼直接登錄。說明如下:

,Windows ,環境自動登錄

,Window ,環境下,還是以常見的,NetSarang Xshell,為例,請執行如下配置進行自動登錄:

  1. ,單擊 ,文件 ,> ,屬性,,打開主機屬性配置窗口。
  2. ,,點擊, ,連接, ,> ,用戶身份驗證,,如下圖所示,將, ,方法, ,設置為, ,Public Key,;將, ,用戶名, ,設置為已經設置了證書登錄的相應用戶名;將, ,用戶密鑰, ,設置,為對應的私鑰。最後,點擊, ,確定,。
  3. ,再次連接相應服務器時,無需密碼輸入用戶名和密碼,即可自動登錄。

,Linux ,環境自動登錄

,Linux ,環境下,在客戶端直接通過, ,ssh ,軟件免密碼登錄:

ssh <用戶名>@<目標服務器>

比如:
ssh root@192.168.0.1

,如果修改了私鑰路徑或文件名,則需要通過, ,–i ,參數進行指定:

ssh –i <私鑰路徑及文件名> <用戶名>@<目標服務器>

比如:
ssh -i /bak/my_rsa user@192.168.0.1

 

,更多信息

 

最後更新:2016-07-12 15:24:19

  上一篇:go 雲服務器 ECS Linux SSH 連接交互過程簡介__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
  下一篇:go 雲監控ECS監控插件安裝方法__技術分享_技術運維問題_雲監控-阿裏雲