web-dev-qa-db-ja.com

.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の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を使用しようとしました。何も機能しません。そこに何が悪いのか考えはありますか?

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


編集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をロードします。なぜ?!

4
gcb

man ssh-configのコメント:

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

したがって、必要な構成が、最初に一致したHostエントリにあることを確認してください。これは、ssh -vv行が一致するApplying options forで示されています。

一般的な場合、これはHost *lastであるべきであることを意味します。

2
Tom Hale