OpenSSH/實用程式
- ssh-agent(1) - 一個可以儲存私鑰的認證代理。
- ssh-add(1) - 用於新增或刪除上述代理的金鑰的工具。
- ssh-keygen(1) - 一個金鑰生成工具。
- ssh-keyscan(1) - 用於從多個主機收集公鑰的工具。
- ssh-copy-id(1) - 將公鑰安裝到遠端機器的 authorized_keys 登錄檔中。
- ssh-vulnkey(1) - 檢查金鑰是否在受損金鑰黑名單中
ssh-agent(1) 是一種工具,用於在記憶體中儲存私鑰以便在會話期間重複使用。通常它是在會話開始時啟動的,後續視窗或程式作為代理的客戶端執行。環境變數 SSH_AUTH_SOCK 指示應用程式與代理通訊的套接字。
ssh-add(1) 是一種工具,用於將金鑰身份載入到代理中以便重複使用。它也可以用於從代理中刪除身份。代理儲存用於身份驗證的私鑰。
ssh-keyscan(1) 自 OpenSSH 版本 2.5.1 以來一直是 OpenSSH 套件的一部分,用於檢索公鑰。使用 ssh-keyscan(1) 或任何其他方法檢索到的金鑰必須透過檢查金鑰指紋來驗證,以確保金鑰的真實性並降低中間人攻擊的可能性。預設情況下是使用 SSH 協議 2 請求 ECDSA 金鑰。David Mazieres 編寫了 ssh-keyscan(1) 的初始版本,Wayne Davison 添加了對 SSH 協議版本 2 的支援。
ssh-keygen(1) 用於生成用於身份驗證的金鑰對或證書,更新和管理金鑰,或驗證金鑰指紋。它與 SSH 金鑰一起工作,可以執行以下操作
- 生成新的金鑰對,可以是 ECDSA、Ed25519、RSA、ECDSA-SK 或 Ed25519-SK。
- 從已知主機中刪除金鑰
- 從私鑰重新生成公鑰
- 更改私鑰的密碼短語
- 更改私鑰的註釋文字
- 顯示特定公鑰的指紋
- 顯示特定公鑰的 ASCII 藝術指紋
- 如果讀卡器可用,則將金鑰載入到智慧卡或從智慧卡讀取金鑰
如果使用舊協議 SSH1,則 ssh-keygen(1) 只能生成 RSA 金鑰。但是,SSH1 已經過時很久,如果發現正在使用,則應重新調整系統。此外,雖然可以生成 DSA 金鑰,但它們已過時,如果發現應予以替換。
金鑰指紋的一個重要用途是在首次連線到機器時。指紋是公鑰的雜湊或摘要。指紋可以在帶外傳輸並提前載入到 ~/.ssh/known_hosts 或 /etc/ssh/ssh_known_hosts 檔案中,以便在第一次連線之前完成。金鑰的驗證資料應在帶外發送。它可以透過郵寄、傳真、簡訊或電話提前傳送,或者以其他方式以某種方式進行溝通,以便您可以確信它是真實且未經更改的。
$ ssh -l fred zaxxon.example.org
The authenticity of host 'zaxxon.example.org (203.0.113.114)' can't be established.
RSA key fingerprint is SHA256:DnCHntWa4jeadiUWLUPGg9FDTAopFPR0c5TgjU/iXfw.
Are you sure you want to continue connecting (yes/no)?
如果您看到該訊息並且金鑰的指紋與您提前收到的指紋匹配,則連線可能正常。如果您看到該訊息並且金鑰的指紋與您提前收到的指紋不同,則停止並斷開連線,並透過電話或 VoIP 進行聯絡以解決錯誤。一旦 SSH 客戶端從伺服器接受了金鑰,它就會儲存在 known_hosts 中。
$ ssh -l fred galaga.example.org
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:QIWi4La8svQSf5ZYow8wBHN4tF0jtRlkIaLCUQRlxRI.
Please contact your system administrator.
Add correct host key in /home/fred/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/fred/.ssh/known_hosts:1
ECDSA host key for galaga.example.org has changed and you have requested strict checking.
Host key verification failed.
如果您開始連線到已知主機,並且收到類似上面的錯誤,則要麼第一次連線是到冒名頂替者,要麼當前連線是到冒名頂替者,要麼機器上進行了非常愚蠢的操作。無論如何,請斷開連線,不要嘗試登入。透過帶外聯絡系統管理員以找出正在發生的事情。[1] 可能伺服器已重新安裝,無論是整個作業系統還是隻是 OpenSSH 伺服器,都沒有儲存舊金鑰。這會導致生成新的金鑰並解釋它們的存在。無論哪種情況,請在連線之前與系統管理員確認。
可以使用 -F 在 known_hosts 中查詢雜湊主機名和地址。或者,可以使用 -R 刪除它們。
$ ssh-keygen -F sftp.example.org -f ~/.ssh/known_hosts
# Host sftp.example.org found: line 7 type RSA
|1|slYCk3msDPyGQ8l0lq82IbUTzBU=|KN7HPqVnJHOFX5LFmTXS6skjK4o= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA3cqqA6fZtgexZ7+4wxoLN1+YDvPfBtt4/m+N/RI8o95CXqvqZMIQjuVarVKjwRwt9pTJIVzf6bwjcNkrUx9dQqZNpNBkcvBRdmd775opWCAfkHEueKxkNx3Kb1yitz0dUaFkRwfTsXAjh+NleBq2ofAfjowu/zzCnnbAKy2R2OE=
ssh-copy-id 包含在一些發行版中,用於將公鑰安裝到遠端機器的 authorized_keys 檔案中。它是一個簡單的 shell 指令碼,第一次登入後仍應手動檢查 authorized_keys 檔案,以驗證一切正常,並且金鑰按預期複製。
ssh-vulnkey 包含在一些 GNU/Linux 發行版的某些版本中,用於檢查金鑰是否在受損金鑰黑名單中。黑名單是在一些發行版分發了一個損壞的 OpenSSL 版本[2]時變得必要的,導致生成易於預測和受損的錯誤金鑰。在使用該損壞版本期間生成的金鑰如果發現已受損,則無法修復,必須替換。這個問題已經修復,新的金鑰應該沒問題。
- ↑ Brian Hatch (2004). "SSH 主機金鑰保護". SecurityFocus. 檢索於 2013-04-14.
- ↑ Jake Edge (2008). "Debian 漏洞影響廣泛". LWN. 檢索於 2013-04-14.