在Linux系統中進行ssh連線的具體步驟:
(1) 伺服器啟動ssh:
ssh伺服器A啟動ssh服務(服務名稱為ssh或sshd)。系統會自動確認在/etc/ssh/目錄下是否存在著公鑰A和私鑰A:公鑰A的副檔名通常為pub,而私鑰A通常沒有副檔名。
在/etc/ssh/目錄下,常見的公、私鑰檔名有:
公鑰檔名 |
私鑰檔名 |
說明 |
ssh_host_key.pub |
ssh_host_key |
ssh(version1)所建立出來的公、私鑰。 |
ssh_host_rsa_key.pub |
ssh_host_rsa_key |
ssh(version2)利用RSA演算法所建立出來的公、私鑰。 |
ssh_host_dsa_key.pub |
ssh_host_dsa_key |
ssh(version2)利用DSA演算法所建立出來的公、私鑰。 |
若/etc/ssh/目錄下沒有這些公、私鑰,則系統會自動建立。
從上述可知,若伺服器A的管理員沒有刪除這些公、私鑰,則這些公、私鑰便會持續被使用,直到天荒地老。
※ 註(重要!):若伺服端的ssh公、私鑰遺失,而管理員想手動重新產生這些公、私鑰,其語法為:
ssh-keygen -t dsa -f ssh的dsa私鑰的完整路徑
ssh-keygen -t rsa -f ssh的rsa私鑰的完整路徑
例如:
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
即可手動重新產生這些公、私鑰。過程中若系統有要管理員輸入passphrase,可直接按<enter>鍵略過亦無妨。ssh-keygen的詳細用法在以下會談到。
(2) 伺服器A接到客戶端B的連線請求:
在接到請求後,A會把公鑰A公布在網際網路上,以讓B取得。
(3) 用戶端B收到公鑰A:
用戶端B會先到己方的~/.ssh/known_hosts檔案中,檢查裡頭是否有關於公鑰A的紀錄:
※ 若有,表示雙方應在以前就有連線過,故A應是值得信賴的連線對象,直接進入下一步驟。
※ 若無,表示雙方應是第一次連線,此時系統可能會詢問B的使用者,是否真要和A連線?若使用者回答是,則將公鑰A加入~/.ssh/known_hosts檔案中,並進行下一步驟。否則取消連線。
註: 若伺服器A因為某些原因而刪除或遺失了其公鑰,勢必要再建立另一把公鑰。這時,若B還要再和A連線,因為A的公鑰換了,所以B會以為是和A第一次連線,而將新的公鑰A加入~/.ssh/known_hosts檔案中。
(4) 用戶端建立公鑰B、私鑰B,並將公鑰B傳送給伺服端A。通常,公鑰B、私鑰B在用戶端主機上所存放的位置,使用者是很難自行找到的。
(5) 雙方正式開始連線,進行通訊。
留言列表