.ssh/configの変更が無視される原因

.ssh/configの変更が無視される原因

正常に動作していたファイルがありました~/.ssh/config。形式は次のとおりでした:

Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 5000
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain

(他にもたくさんのドメインがありましたが、今は無視しましょう)

完璧に動作していました。マニュアルには、より具体的なホスト パターンを一番上に配置する必要があると書かれていましたが、その方法では常に問題なく動作しました。私は常にこの 2 つのドメインに ssh で接続し、正しい ID キーが問題なく取得されました。この 2 つのドメインに null キーが試行されても、問題は発生しませんでした。私はこれを何年も使用してきました。常に正しいユーザーとキーを取得できました。私は Debian、Fedora、OSX のいずれでもこの同じ構成ファイルを使用しました。

今日、以前は機能していた osx 10.10 (OpenSSH_6.2p2、OSSLShim 0.9.8r 2011 年 12 月 8 日) で、上部のルールUser unkownにも追加してみました*。すると突然、試すすべての ssh で、ssh が user=unkown と identityfile=id_null を送信し、どこにもログインできなくなりました。そのため、ssh_config のマニュアル ページを読み、すべてをマニュアルどおりにそのままにしましたが、それでも機能しません。エントリUserの削除も試みましたが*、問題は解決しませんでした。

私の現在の.ssh/configファイルは

Host exact.hostname.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain
Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 50

i の場合、ID ファイルとして id_null を使用しようとしますssh exact.hostname.domain.com。また、繰り返しではなく、複数のパターンと have を使用することも試みましたHost *.domain.com exact.hostname.domain.com。何も機能しません。何が間違っているのか、何かアイデアはありますか?

デフォルトを設定Userし、IdentityFileドメインごとに上書きするにはどうすればよいでしょうか?


編集 1: のHost exact.hostname.domain.com前と後の両方に を追加しました*。次のようにssh -vvv表示されます:

debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com

しかし、私はまだ最後にno such identity: .ssh/id_null: No such file or directory


編集2:私が見た他の奇妙なものssh -vvv

常に、私が持っているすべてのキーを使用しようとします。 にはハードコードされたデフォルトがある可能性があると考え.ssh/id_rsa*、そのデフォルトから隠すためにすべてのプライベート キーを に移動し.ssh/keys/、特定のHostエントリを更新しました... 結局、すべてのホスト エントリのキーが試行されています。一致しないエントリも試行されています。

要約すると、ファイルの上部と下部に特定のホストが 1 つずつ一致しており (安全のため)、次に一致しないホスト、そして 1*つがあります。

しかし、ssh -vvv は次のように表示します:

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit

.ssh/keys/id_rsa_gitそれがIdentityFile唯一言及されているのなら、一体なぜ追加されるのでしょうか? また、デバッグ出力に書かれているように明示的に一致しているにもかかわらず、Host github.com最終的に送信しようとするのはなぜでしょうか?id_nullHost exact.hostname.domain.comdebug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com


編集3:

すべてのキーを に移動し.ssh/keys/*、 内の各ホストに対してキーのみを指定するとssh_config、すべてのインスタンス化で次のようになりますssh:

/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory

しかしその後もまだIdentityFilesをロードします他の接続中に ssh_config 内のホスト。なぜ?

答え1

man ssh-config言う:

各パラメータに対して最初に取得された値が使用されるため、ホスト固有の宣言はファイルの先頭近くに指定し、一般的なデフォルトは末尾に指定する必要があります。

したがって、次の行Hostに一致するように、必要な構成が最初に一致したエントリにあることを確認してください。ssh -vvApplying options for

一般的には、これHost *最後

関連情報