2014年5月20日 星期二

SSH 的「自動認證機制」 - 使用 ECDSA 密鑰

SSH 「自動驗證密碼」的公鑰、私鑰在之前多建議採用 DSA,在新版的 Fedora 中引入一個更好的公、私鑰演算法(事實上,是 OpenSSH 對新版導入的),稱為「ECDSA」。根據一些研究所言,「ECDSA」的加密強度是「DSA」的四倍,也就是『相同加密強度,只要 1/4 長度的私鑰即可。
  有新的加密演算法,當然就要使用它,以下是將前文『SSH 的「自動認證機制」 - 使用 DSA 密鑰』修改,使適用於「ECDSA」。為節省篇幅重覆部份只保留命令,而詳細說明留在前文,請讀者自行前往參考。

一、確認主機的作業系統是否支援「ECDSA」

根據 OpenSSH 5.7 的發佈註記所載,從這一版開始支援「ECDSA」;但是,透過 OpenSSH 提拱 SSH 服務的系統,並不一定採用新版。因此,使用者要確認你的系統是否支援「ECDSA」光看版本並不夠。筆者採用一個簡單的測試方法,就是直接執行命令,
[SiB@Core-i7 ~]$ ssh-keygen -t ecdsa
Generating public/private ECDSA key pair.
Enter file in which to save the key (/home/SiB/.ssh/id_ecdsa): ^C
[SiB@Core-i7 ~]$
若會開始「公、私鑰」產生程序則表示該系統支援「ECDSA」。上例中,將程序中斷是因它在伺服器執行,該命令只是用以測試「ECDSA」的支援而已。
[SiB@Celeron-D ~]$ ssh-keygen -t ecdsa
unknown key type ECDSA
[SiB@Celeron-D ~]$
在第二個例子中,出現『unknown key type ECDSA』,表示該系統並不支援「ECDSA」。必須連線的兩部主機皆支援「ECDSA」才可以使用「ECDSA」的「自動驗證」機制。
必須連線的兩部主機皆支援「ECDSA」才可以使用「ECDSA」的「自動驗證」機制

二、建立「自動認證」機制的程序

1. 建立「公鑰」「私鑰」

[SiB@Celeron-D ~]$ ssh-keygen -t ecdsa
上例過程中的詢問是否加入密語『Enter passphrase (empty for no passphrase):』請參考前文說明。

2. 上傳至「伺服器」

[SiB@Celeron-D ~]$ scp -P 5566 ~/.ssh/id_ecdsa.pub SiB@192.168.10.15:.ssh/newkey
上例中假設 5566 是「伺服器」的 SSH 埠號,『~/.ssh/id_ecdsa.pub』是本地的 dsa「公鑰」,而『SiB@192.168.10.15』是指複製目的端的電腦 IP 為 192.168.10.15、登入帳號為 SiB,『:』後的『.ssh/newkey』是目的端電腦的「公鑰」暫存檔。

3. 以平常方式連線至「伺服器」

[SiB@Celeron-D ~]$ ssh 192.168.10.15 -p 5566 -l SiB
SiB@192.168.10.15's password:
Last login: Thu Apr 25 13:28:01 2014 from 192.168.10.13
[SiB@Core-i7 ~]$
上例中的 192.168.10.15 及 5566 分別是「伺服器」的 IP 網址 及 SSH 埠號,而登入帳號為 SiB。

4. 將「公錀」附加到「認證金錀」檔

[SiB@Core-i7 ~]$ cd .ssh
[SiB@Core-i7 .ssh]$ cat newkey >> authorized_keys
上例中,第一個命令是將「目前工作目錄」更改為『~/.ssh/』,而第二個命令是將剛才上傳的「公鑰」附加(append)到『authorized_keys』這個檔案的尾巴。
注意:若『authorized_keys』這個檔案不存在,則第二個命令可以改為
[SiB@Core-i7 .ssh]$ mv newkey authorized_keys

5. 更換「公鑰」

若是因「本地電腦」重灌作業系統,或是因為安全理由,要更換「公鑰」時,可以到「伺服器」端,修改你的「已認證金鑰」檔。使用你熟悉的「純文字編輯器」,例:gedit 或 vim 編輯這個檔案。
  每一個「DSA 金鑰」都是以『ssh-dss』為開始,而「ECDSA 金鑰」則是以『ecdsa-sha2-nistp256』為開始,並以『帳號名@本地電腦名稱』或『帳號名@本地電腦 IP 網址』為結束。將這個金鑰刪除後,再重新附加入新的金鑰即可。

已測試版本:

  • Fedora: 14, 20

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)