正常に機能していた~/.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のmanページを読み、すべてを本のそばに置いておきました...それでも機能しません。また、*
から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 ssh exact.hostname.domain.com
の場合でも、IDファイルとしてid_nullを使用しようとします。また、複数のパターンを使用して、繰り返す代わりに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
しかしその後もまだ接続中にssh_configのその他ホストからIdentityFilesをロードします。なぜ?!
man ssh-config
のコメント:
各パラメーターに対して最初に取得された値が使用されるため、ファイルの先頭近くにホスト固有の宣言を追加し、最後に一般的なデフォルトを指定する必要があります。
したがって、必要な構成が、最初に一致したHost
エントリにあることを確認してください。これは、ssh -vv
行が一致するApplying options for
で示されています。
一般的な場合、これはHost *
がlastであるべきであることを意味します。