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*
一致します。target
target%via
target.example.com
target.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