web-dev-qa-db-ja.com

ホスト固有の宣言でsshControlPathを変更する

2つの異なるSSHキーを使用して同じSSHホスト(GitHub)にアクセスする必要がある状況があります。これは問題ありません。ホスト名をエイリアスすることで簡単に設定できます。この構成をSSH多重化構成と組み合わせると、問題が発生します。デフォルトのControlPathをホスト固有の宣言でオーバーライドできないようです。

多分これはそれが機能する方法だけですか?多分それはバグですか?私は何か間違ったことをしていますか?

ちなみに私はMac10.7を使用しています。

これが私の設定です:

Host *
  ControlMaster auto 
  ControlPath ~/.ssh/connections/ssh-%r@%h:%p

Host github.com-X
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_X
  IdentitiesOnly yes 
  ControlPath ~/.ssh/connections/ssh-%r@%h-X:%p

Host github.com
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h

少しいじくり回しましたが、Host *宣言で指定されているように常にControlPathを取得しているようです。

ssh -T [email protected]

Id_rsa_Xを使用して正しいユーザーとしてログインしますが、ここにドメインソケットが作成されます。

~/.ssh/connections/[email protected]:22

のではなく:

~/.ssh/connections/[email protected]:22

そのため、後でid_rsaを使用してSSHコマンドを発行しようとすると、接続の多重化のためにid_rsa_Xユーザーが表示されます。言い換えると:

ssh -T [email protected]

キーがid_rsa_Xであるユーザーにhelloメッセージを表示します。

何か案は?

編集:vgoffによるコメントへの応答-いいえ、すべての設定を読んでいるようです...

$ ssh -vT [email protected]
OpenSSH_5.6p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/<username>/.ssh/config
debug1: Applying options for *
debug1: Applying options for github.com-X
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/<username>/.ssh/connections/[email protected]:22" does not exist
<snip>

すべての設定を読み取り、間違ったControlPathを使用しようとしていることがわかります。

4
petrsnd

~/.ssh/configであまり具体的でないオプションをさらに下に移動する必要があります。 Host *オプションが最初に適用され、より具体的であっても、後で衝突するオプションによって上書きされることはありません。ただし、Host *で指定されなかった新しいオプションが適用され、それがログに表示されたものだと思います。

ソース: http://linux.die.net/man/5/ssh_config

ssh(1)は、次のソースから次の順序で構成データを取得します。

  1. コマンドラインオプション
  2. ユーザーの構成ファイル(〜/ .ssh/config)
  3. システム全体の構成ファイル(/ etc/ssh/ssh_config)

各パラメーターについて、最初に取得した値が使用されます。構成ファイルには、「ホスト」仕様で区切られたセクションが含まれており、そのセクションは、仕様で指定されたパターンの1つに一致するホストにのみ適用されます。一致するホスト名は、コマンドラインで指定されたものです。

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

8
gipset