1. 程式人生 > >Linux系統用ssh-keygen生成公私鑰

Linux系統用ssh-keygen生成公私鑰

專案開發過程中我們經常需要用git從遠端程式碼庫拉取程式碼到本地,或者需要從一臺伺服器端登入另一臺伺服器,這些情況下都需要知道遠端程式碼庫或者伺服器的賬號和密碼。有沒有一種方法可以不用每次連線遠端機器的時候都輸入賬號和密碼呢?答案是有的,這就是利用ssh-keygen生成本地機器的公鑰和私鑰對,將公鑰提交給遠端機器作為身份驗證,遠端機器通過公鑰對本地機器進行身份驗證成功之後,就可以實現無密碼連線遠端機器。

在終端輸入命令列

ssh-keygen -t rsa -C "[email protected]"

-t  表示私鑰型別

-C 表示註釋,一般為自己的郵箱地址

更多引數如下:

-b:指定私鑰長度; 

-e:讀取openssh的私鑰或者公鑰檔案; 

-f:指定用來儲存私鑰的檔名; 

-i:讀取未加密的ssh-v2相容的私鑰/公鑰檔案,然後在標準輸出裝置上顯示openssh相容的私鑰/公鑰; 

-l:顯示公鑰檔案的指紋資料; 

-N:提供一個新密語; 

-P:提供(舊)密語; 

-q:靜默模式; 

公私鑰對生成過程中會提示輸入passphrase口令,這裡根據自己的需要輸入兩次一樣的口令,或者留空即可。

如果沒有指定-f引數,則會在~/.ssh/目錄下生成id_rsa(私鑰)和id_rsa.pub(公鑰)兩個檔案。如果-t引數指定為dsa,則生成id_dsa和id_dsa.pub兩個檔案(下文以rsa為例)。

切忌把私鑰透露給任何人。

到此,本地機器的公私鑰對就生成完成了。

下面看看如何免密碼從遠端程式碼庫拉取程式碼和免密碼登入遠端機器。

一、免密碼拉取程式碼庫程式碼。

1.複製~/.ssh/id-rsa.pub全部內容。

2.登入gitlab,進入Profile Settings->SSH Keys->ADD SSH KEY,在key表單輸入id-rsa.pub的全部內容,Title表單隨便填寫一個title。點選ADD KEY儲存ssh key的配置。

3.回到本地機器,終端git clone 遠端程式碼git地址,即可拉取程式碼庫內容了。

二、免密碼登入遠端機器

1.複製~/.ssh/id-rsa.pub全部內容。


2.登入遠端機器,進入遠端機器的~/.ssh/目錄,建立authorized_keys檔案,將本地機器的id-rsa.pub檔案全部內容黏貼到遠端機器的authorized_keys檔案中,儲存。

3.回到本地機器,終端輸入#ssh 遠端IP地址。即可實現免密碼登入遠端機器。

可能出現的問題:

有時會出現正確配置公私鑰對之後仍無法登入遠端機器的情況,此時需登入遠端機器對~/.ssh/目錄和檔案進行如下配置:

chmod 600 authorized_keys  #設定authorized_keys許可權
chmod 700 -R .ssh  #設定.ssh目錄許可權

要保證.ssh和authorized_keys都只有使用者自己有寫許可權。許可權開太大反而會驗證失敗。