ProxyCommandおよびnetcatモードを使用する場合、sshが構成からホスト名を解決するようにします


16

私は、ssh接続をバウンスするためのいくつかの普遍的なオプションを設定しようとしています。これが私の~/.ssh/configファイルです。

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

エイリアスを利用*%viaするとHost、次のようになります:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

ただし、利用する場合

% ssh target.example.com%via

ターゲットサーバーにアクセスしましたが、間違ったユーザーであり、公開キー認証がありません。

私は考えて私の質問は、この時点で、利用する場合、バウンスのこの方法をんでForwardAgent、私のsshのconfig /環境全体、または単にキーを通過します。キーだけの場合、前者は何らかの方法で利用できますか?

私のsshバージョンは5.9v1、ゲートウェイは5.9v1、ターゲットは5.3p1です。-W5.4で導入されたと思いますが、最後のボックスでは問題になりませんか?古い学校を利用することncも同じです。

行の各ボックスに手動でsshできることを確認しました。そうすることで、ホスト名エイリアス情報が渡されないことを示します。これは、ゲートウェイ上にいるときssh targetはできssh target.example.comますが、できません。これはpubkey authで機能します。ゲートウェイとターゲットは偶然同じユーザー名を持っているため、設定がプッシュされない場合はこれが機能します。

ForwardAgentまたは同様の構成がこの情報をプッシュできない場合、この情報をゲートウェイに.ssh / configを保持して、それを回避する最も簡単な方法は何ですか?

回答:


14

うわー、この質問をしてくれてありがとう。SSHを完全に活用している人を見かけることはまれであり、この質問はいくつかの分野でヒットしています。

これはProxyCommand問題ではありません。ProxyCommand単にリモートクライアントと話をしようとする前に準備して何かをする地元のsshクライアントを指示します。はい、この例では、別のsshセッションと通信しますが、そのセッションは-W単に入力を受け取り、別のマシンに転送します。準備sshセッションは完全に独立していると考えることができます。避けられない車のアナロジー:あなたの車は、ポイントAからポイントBに行くためにフェリーに乗らなければならなかったかどうかにかかわらず、同じ車です。

これはForwardAgent問題ではありません。 ForwardAgentローカルクライアントに、リモートセッションの環境内でローカルキーを使用可能にする機能を提供します。リモートセッションの確立を過ぎていない。

これは.ssh/configフォーマットの問題です。2番目と3番目のdebug1行に注意してください。それらは、あなたのから適用されるHostスタンザをリストします.ssh/config。これは機能します$ ssh target.example.com%viaが、ユーザー名とキーが間違っていることに注意してください。まあ、のスタンザHost targetは読み込まれていません(正しいユーザー名とキーファイルを提供します)。どのスタンザが使用されていますか? *および*%via

これらのオプションを渡す方法は?面白いことに、ワイルドカードは長さ0の文字列と一致します。 Host target*一致しますtargettarget%viatarget.example.comtarget.example.com%via

そして、あなたが質問をする.ssh/configと、gatewayマシンのヘルプを設定します。いいえ、そうではありません。それは決して読まれないでしょう。私たちのローカルマシンからすべてが起こっています。

説明したすべてが、なぜ機能し$ ssh target.example.com%viaないのかを答えるだけです。

あなたが好む$ ssh target%via。当然、より便利です。ホスト名としてtarget見つからないため、短い形式は失敗しています。解決していません。なぜsshが噴出しないのssh: Could not resolve hostname target: Name or service not knownですか?ProxyCommandが既に正常に確立されているためです。ssh接続の要素は構築されましたが、ホスト名の障害は予期しない場所で発生しているため、より一般的なメッセージで爆破されています。デバッグ情報を改善できる箇所を特定するために、これに関するバグレポートを提出します。

最終解説:

私はHost *%via構文が好きです。きれいですが、柔軟性があります。私は以前見たことがHost *+*あり、それは%h(ost)どこに行くかを決定するために最初と最後の両方の部分を使用します。しかし、それを理解するには少し手間がかかります。リンク:http : //wiki.gentoo.org/wiki/SSH_jump_host

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.