
正常に動作していたファイルがありました~/.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_null
Host exact.hostname.domain.com
debug1: /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 -vv
Applying options for
一般的には、これHost *
は最後。