Openssh

OpenSSH 的 SSH 客戶端不遵守 IdentityFile 設置的順序

  • July 23, 2018

如何指定 OpenSSH 的 SSH 客戶端(OpenSSH_7.5p1,OpenSSL 1.0.2k 2017 年 1 月 26 日;Git for Windows v2.11.1)向 SSH 兼容的守護程序(例如 Apache Mina SSHD(Gerrit程式碼審查服務)。我的意圖是在回退到 RSA 之前嘗試使用 Ed25519 公鑰/私鑰對進行身份驗證。

給定使用者主目錄下的以下標準 Ed25519 和 RSA 公鑰/私鑰對:

  • ~/.ssh/id_ed25519{,.pub}
  • ~/.ssh/id_rsa{,.pub}

以及使用者的 SSH 配置文件 (~/.ssh/config) 中的以下主機部分:

Host foobar foobar.example.com
 Hostname foobar.example.com
 IdentityFile ~/.ssh/id_ed25519

Host *
 IdentityFile ~/.ssh/id_ed25519
 IdentityFile ~/.ssh/id_rsa

在調試模式下測試 SSH 連接時:

$ ssh -Tv bob@foobar
debug1: Reading configuration data ~/.ssh/config
debug1: ~/.ssh/config line 49: Applying options for foobar
debug1: ~/.ssh/config line 63: Applying options for *
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Offering ED25519 public key: ~/.ssh/id_ed25519
debug1: Server accepts key: pkalg ssh-ed25519 blen 51
debug1: Authentication succeeded (publickey).

我可以看到 OpenSSH 的 SSH 客戶端首先提供了 RSA 公鑰/私鑰對。但為什麼不先 Ed25519 呢?

添加IdentitiesOnly選項。如果沒有這個選項,SSH 會首先嘗試可用的預設 ssh 密鑰:id_rsa, id_dsa, id_ecdsa. 要更改此行為,請將您的配置替換為以下配置:

Host foobar foobar.example.com
 Hostname foobar.example.com
 IdentityFile ~/.ssh/id_ed25519
 IdentitiesOnly yes

Host *
 IdentityFile ~/.ssh/id_ed25519
 IdentityFile ~/.ssh/id_rsa
 IdentitiesOnly yes

引用自:https://unix.stackexchange.com/questions/457956