SSH 精靈 (sshd)—伺服器端

若要使用 SSH 用戶端程式 ssh 與 scp,伺服器 (SSH 精靈) 必須在背景執行,監聽 TCP/IP port 22 的連接。精靈會在第一次啟動時產生三個金鑰組合。每個金鑰組合都是由私密與公用金鑰所組成。為了保證透過 SSH 通訊的安全性,必須限制只有系統管理員可以存取私密金鑰檔。預設安裝會據此設定檔案權限。SSH 精靈只有在本地上需要私密金鑰,而且絕對不能將它給予任何人。公用金鑰元件 (以 .pub 的副檔名來識別) 會傳送至要求連接的用戶端。它們可讓所有的使用者讀取。

SSH 用戶端所啟始的連接。等待 SSH 精靈與要求 SSH 用戶端交換識別資料,以比較通訊協定與軟體版本,並防止透過錯誤埠的連接。因為原始 SSH 精靈的子處理序會回覆要求,所以可以同時建立數個 SSH 連接。

至於 SSH 伺服器與 SSH 用戶端之間的通訊,OpenSSH 可以支援 SSH 通訊協定的版本1 與 2。預設會使用 SSH 通訊協定的版本 2。使用 - 1 參數即可覆寫此預設以使用通訊協定的版本 -1。若要在系統更新後繼續使用版本  1,請遵循 /usr/share/doc/packages/openssh/README.SuSE 中的指示。這個文件也描述如何只執行一些步驟,即將 SSH 1 環境轉換成工作 SSH 2 環境。

當使用 SSH 的版本 1 時,伺服器會傳送每小時由 SSH 精靈重新產生的公用主機金鑰與伺服器金鑰。這兩者都允許 SSH 用戶端加密自由選擇的工作階段金鑰,並且會將它傳送至 SSH 伺服器。SSH 用戶端也會指示伺服器要使用的加密方法 (密碼)。

SSH 通訊協定的版本 2 並不需要伺服器金鑰。兩邊都是使用根據 Diffie-Helman 的演算法來交換金鑰。

私密主機與伺服器金鑰絕對需要解密工作階段的金鑰,而且不能從公用部份產生。只有聯絡的 SSH 精靈可以使用私密金鑰解密工作階段金鑰 (請參閱 man/usr/share/doc/packages/openssh/RFC.nroff)。若要仔細監看此啟始連接階段,可以開啟 SSH 用戶端的 -v 詳細偵錯選項。

用戶端會在第一次與遠端主機連繫後,將所有的公用主機金鑰儲存在 ~/.ssh/known_hosts 中。這將可防止外來的 SSH 伺服器進行「在中間攔截的攻擊」(外部 SSH 伺服器使用假冒的名稱與 IP 位址)。這類的攻擊通常都是由下列方式所偵測出來:在 ~/.ssh/known_hosts 中未包含主機金鑰,或伺服器在缺少適當的私密對照組時無法解密工作階段的金鑰。

建議將儲存在 /etc/ssh/ 中的私密與公用金鑰備份在安全的外部位置。以此方式,就可以偵測出金鑰的修改,並且可以在重新安裝後,再度使用舊的金鑰。這可讓使用者避免收到任何擾人的警告。儘管出現警告,但是如果已確認它確實是正確的 SSH 伺服器,就必須從 ~/.ssh/known_hosts 移除關於此系統的現有項目。