多密鑰ssh-key生成與管理

因爲 git 大文件用 http 方式難以傳輸,必須使用 ssh-key,而 ssh-key 又生成了好多個。最近在各類折騰 ssh,公鑰私鑰上花費了不少時間,現將一些問題總結以下。系統爲 Mac/Linux。linux

密鑰的原理

SSH之因此可以保證安全,緣由在於它採用了公鑰加密。git

整個ssh密碼登陸過程是這樣的:github

  1. 用戶向遠程主機發登陸請求:ssh user@遠程主機
  2. 遠程主機收到用戶的登陸請求,把本身的公鑰發給用戶。
  3. 用戶使用這個公鑰,將登陸密碼加密後,發送回遠程主機。
  4. 遠程主機用本身的私鑰,解密登陸密碼,若是密碼正確,就贊成用戶登陸。

在linux上,若是你是第一次登陸對方主機,系統會出現下面的提示:算法

$ ssh user@hostshell

The authenticity of host 'host (12.18.429.21)' can't be established.安全

RSA key fingerprint is 98:2e:d7:e0:de9f:ac:67:28:c2:42:2d:37:16:58:4d.服務器

Are you sure you want to continue connecting (yes/no)?ssh

這段話的意思是,沒法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續鏈接嗎?gitlab

所謂"公鑰指紋",是指公鑰長度較長(這裏採用RSA算法,長達1024位),很難比對,因此對其進行MD5計算,將它變成一個128位的指紋。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再進行比較,就容易多了。網站

很天然的一個問題就是,用戶怎麼知道遠程主機的公鑰指紋應該是多少?回答是沒有好辦法,遠程主機必須在本身的網站上貼出公鑰指紋,以便用戶自行覈對。

假定通過風險衡量之後,用戶決定接受這個遠程主機的公鑰。

Are you sure you want to continue connecting (yes/no)? yes

系統會出現一句提示,表示host主機已經獲得承認。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

而後,會要求輸入密碼。

Password: (enter password)

若是密碼正確,就能夠登陸了。

原文:http://itindex.net/detail/48724-ssh-認證-原理

密鑰的生成和管理

密鑰的生成

在命令行中,鍵入

ssh-keygen -t rsa -C "$your_email"

會生成一對密鑰,默認的狀況下,私鑰將放在~/.ssh/id_rsa,對應的公鑰則爲~/.ssh/id_rsa.pub

在生成的過程當中,會詢問你放密鑰的位置。因爲每一個人可能不止須要一個密鑰,因此能夠另存爲其餘名字的密鑰,好比path/to/your/dir/id_rsa_new,此時它也將生成對應的公鑰。

使用如下代碼來查看生成的公鑰

cat ~/.ssh/id_rsa.pub

將公鑰複製到你須要的服務器上(好比 github,gitlab 等等)

密鑰的管理

如前文所說,若是咱們須要多個密鑰,那麼在使用中,如何肯定實際使用哪個呢?

目前爲止,ssh-key 用得最多的兩個 地方,一是 git 相關服務,二是遠程鏈接服務器。

命令輸入

-i指定私鑰,-p指定端口,鏈接服務器

ssh -i path/to/your/key developer@192.168.1.237 -p 23
scp -i path/to/your/key filename developer@192.168.1.237:/diskpath

配置 ~/.ssh/config 文件

因爲 git 命令不能指定私鑰,因此要經過 ~/.ssh/config 文件來控制。若是沒有就在~/.ssh目錄建立config文件,該文件用於配置私鑰對應的服務器。好比:

Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
 
Host tsinghua
HostName tsinghua.edu.cn
User git
IdentityFile ~/.ssh/id_rsa_new

這樣,連接到 github.com 時,使用的就是 id_rsa;連接到 tsinghua.edu.cn 時,使用 id_rsa_new。另外,Host 的名字能夠隨便設置,而且在 ssh 後面至關於 User@HostName,好比 ssh github 等價於 ssh git@github.com

私鑰密碼修改

若是工做中,你使用了一個沒有密碼的私鑰,有一天服務器被黑了,你是跳到黃河都洗不清。而生成密鑰時,每每會選擇一個比較簡單的密碼。爲了安全起見,仍是應該修改一下:利用ssh-keygen -p,系統會提示選擇須要修改的私鑰,默認是~/.ssh/id_rsa,選好文件後按回車,會提示你輸入舊密碼,輸入好後會提示輸入新密碼,則修改完成。

相關文章
相關標籤/搜索