1. 程式人生 > >ssh證書登入(例項詳解)

ssh證書登入(例項詳解)

http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html

前言

本文基於實際Linux管理工作,例項講解工作中使用ssh證書登入的實際流程,講解ssh證書登入的配置原理,基於配置原理,解決實際工作中,windows下使用SecureCRT證書登入的各種問題,以及實現hadoop叢集部署要求的無密碼跳轉問題。

ssh有密碼登入和證書登入,初學者都喜歡用密碼登入,甚至是root賬戶登入,密碼是123456。但是在實際工作中,尤其是網際網路公司,基本都是證書登入的。內網的機器有可能是通過密碼登入的,但在外網的機器,如果是密碼登入,很容易受到攻擊,真正的生產環境中,ssh登入都是證書登入。

證書登入的步驟

1.客戶端生成證書:私鑰和公鑰,然後私鑰放在客戶端,妥當儲存,一般為了安全,訪問有黑客拷貝客戶端的私鑰,客戶端在生成私鑰時,會設定一個密碼,以後每次登入ssh伺服器時,客戶端都要輸入密碼解開私鑰(如果工作中,你使用了一個沒有密碼的私鑰,有一天伺服器被黑了,你是跳到黃河都洗不清)。

2.伺服器新增信用公鑰:把客戶端生成的公鑰,上傳到ssh伺服器,新增到指定的檔案中,這樣,就完成ssh證書登入的配置了。

假設客戶端想通過私鑰要登入其他ssh伺服器,同理,可以把公鑰上傳到其他ssh伺服器。

真實的工作中:員工生成好私鑰和公鑰(千萬要記得設定私鑰密碼),然後把公鑰發給運維人員,運維人員會登記你的公鑰,為你開通一臺或者多臺伺服器的許可權,然後員工就可以通過一個私鑰,登入他有許可權的伺服器做系統維護等工作,所以,員工是有責任保護他的私鑰的,如果被別人惡意拷貝,你又沒有設定私鑰密碼,那麼,伺服器就全完了,員工也可以放長假了。

客戶端建立私鑰和公鑰

在客戶端終端執行命令

ssh-keygen -t rsa

rsa是一種密碼演算法,還有一種是dsa,證書登入常用的是rsa。

假設使用者是blue,執行 ssh-keygen 時,才會在我的home目錄底下的 .ssh/ 這個目錄裡面產生所需要的兩把 Keys ,分別是私鑰 (id_rsa) 與公鑰 (id_rsa.pub)

另外就是私鑰的密碼了,如果不是測試,不是要求無密碼ssh,那麼對於passphrase,不能輸入空(直接回車),要妥當想一個有特殊字元的密碼。

ssh服務端配置

ssh伺服器配置如下:

複製程式碼
vim /etc/ssh/sshd_config
#禁用root賬戶登入,非必要,但為了安全性,請配置
PermitRootLogin no

# 是否讓 sshd 去檢查使用者家目錄或相關檔案的許可權資料,
# 這是為了擔心使用者將某些重要檔案的許可權設錯,可能會導致一些問題所致。
# 例如使用者的 ~.ssh/ 許可權設錯時,某些特殊情況下會不許使用者登入
StrictModes no

# 是否允許使用者自行使用成對的金鑰系統進行登入行為,僅針對 version 2。
# 至於自制的公鑰資料就放置於使用者家目錄下的 .ssh/authorized_keys 內
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys

#有了證書登入了,就禁用密碼登入吧,安全要緊
PasswordAuthentication no
複製程式碼

配置好ssh伺服器的配置了,那麼我們就要把客戶端的公鑰上傳到伺服器端,然後把客戶端的公鑰新增到authorized_keys

在客戶端執行命令

scp ~/.ssh/id_rsa.pub [email protected]<ssh_server_ip>:~

在服務端執行命令

cat  id_rsa.pub >> ~/.ssh/authorized_keys

如果有修改配置/etc/ssh/sshd_config,需要重啟ssh伺服器

/etc/init.d/ssh restart

 

客戶端通過私鑰登入ssh伺服器

ssh命令

ssh -i /blue/.ssh/id_rsa [email protected]<ssh_server_ip>

scp命令

scp -i /blue/.ssh/id_rsa filename [email protected]<ssh_server_ip>:/blue

每次敲命令,都要指定私鑰,是一個很繁瑣的事情,所以我們可以把私鑰的路徑加入ssh客戶端的預設配置裡

修改/etc/ssh/ssh_config

#其實預設id_rsa就已經加入私鑰的路徑了,這裡只是示例而已
IdentityFile ~/.ssh/id_rsa
#如果有其他的私鑰,還要再加入其他私鑰的路徑
IdentityFile ~/.ssh/blue_rsa

其他應用場景

SecureCRT金鑰key遠連線程ssh證書登入Linux

  國內大部分人用的系統是windows,而windows下有很多ssh客戶端圖形工作,最流行,功能最強大的就是SecureCRT了,所以我會單獨針對SecureCRT簡單講下實現ssh證書登入Linux的要點,步驟如下:

  1:在SecureCRT建立私鑰和公鑰:主選單->工具->建立公鑰->選擇RSA->填寫私鑰的密碼->金鑰長度填為1024->點選完成,生成兩個檔案,預設名為identity和identity.pub

  2.把私鑰和公鑰轉換為OpenSSH格式:主選單->工具->轉換私鑰到OpenSSH格式->選擇剛生成私鑰檔案identity->輸入私鑰的密碼->生成兩個檔案,指定為id_rsa,id_rsa.pub 

  3.把公鑰id_rsa.pub上傳到ssh伺服器,按照之前配置伺服器端的證書,再配置一次。

  另外,如果你之前用windows的 SecureCRT的證書登入linux的,有一天你換成了linux,並希望通過原來的私鑰登入公司的伺服器,那麼可以把id_rsa拷貝倒~/.ssh/目錄下,配置ssh客戶端參考上文。

  備註:ssh對證書的檔案和目錄許可權比較敏感,要麼根據出錯提示設定好檔案和目錄許可權,要麼是把StrictModes選項設定為no

hadoop部署的無密碼ssh登入

hadoop要求master要無密碼跳轉到每個slave,那麼master就是上文中的ssh客戶端了,步驟如下

   在hadoop master上,生成公鑰私鑰,這個場景下,私鑰不能設定密碼。

   把公鑰上傳到每個slave上指定的目錄,這樣就完成了ssh的無密碼跳轉了。

總結

ssh證書登入,在實際工作才是最常用的登入方式,本人結合了真正工作的場景普及了ssh證書登入的知識,並根據流行的hadoop部署和windows下最常用的SecureCRT例項講解了證書登入。