ProxyCommand モードと netcat モードを使用する場合、SSH が設定でホスト名を解決できるようにする

ProxyCommand モードと netcat モードを使用する場合、SSH が設定でホスト名を解決できるようにする

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設定/環境全体を通過するのか、それともキーだけを通過するのかということです。ただ鍵なら、電子をどのように悪用できるのでしょうか?

私のSSHバージョンは5.9v1、ゲートウェイは5.9v1、ターゲットは5.3p1です。私は-Wこれが5.4で導入されたと思います。しかし、それは最後のボックスでは重要ではありません。そうですか?オールドスクールを使用することはncあまり変わらないようです。

行の各ボックスに手動でSSHを接続できることを確認しました。これにより、ゲートウェイではできませんが、ssh targetできるため、ホスト名のエイリアス情報が渡されないことがわかりますssh target.example.com。これは公開鍵認証に適用されます。ゲートウェイとターゲットのユーザー名は偶然同じで、プッシュ設定なしで機能します。

または、同様の構成でこの情報をプッシュできない場合は、ForwardAgentこの情報を含むゲートウェイに.ssh / configを維持する最も賢明な回避策は何ですか?

ベストアンサー1

さて、こんな質問をしてくれてありがとう。 SSHを最大限に活用する人はほとんどなく、問題はいくつかの分野に分けられます。

これはProxyCommand問題ではありません。これは、ProxyCommand単にリモートクライアントと通信しようとする前にいくつかの準備を行うようにローカルSSHクライアントに指示します。はい、このインスタンスは他のSSHセッションと通信していますが、そのセッションは単に入力を受け取り、-W別のシステムに転送します。 SSHセッションを完全に独立して準備すると考えることができます。避けられない車のたとえ話:A地点からB地点に移動するためにフェリーに乗る必要があるかどうかにかかわらず、車は同じ車です。

これはForwardAgent問題ではありません。 ForwardAgentローカルクライアントがリモートセッションのコンテキストでローカルキーを使用できるようにする機能を提供するようにします。リモートセッションの設定が完了していません。

これは.ssh/configフォーマットの問題です。 2行目と3行目はdebug1です。.ssh/configこれはうまく$ ssh target.example.com%viaいきますが、ユーザー名とキーが間違っていることがわかりました。さて、セクションをHost target読み取ることができません(正しいユーザー名とキーファイルを提供します)。どのセクションが使用されますか? *そして*%via

これらのオプションをどのように渡しますか?興味深いことに、ワイルドカードは長さゼロの文字列と一致します。 、 、 とHost target*一致します。targettarget%viatarget.example.comtarget.example.com%via

だからあなたは質問をします。マシンにヘルプが設定.ssh/configgatewayれていますか?いいえ、できません。決して読まないでしょう。すべての作業はローカルコンピュータで行われます。

私が説明するのはなぜ$ 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

おすすめ記事