実行時のSSH接続先の決定

実行時のSSH接続先の決定

接続するアドレスを生成する関数呼び出しを実行して、SSH接続の宛先アドレスを確認したいと思います。ProxyCommandオンラインで見つけることができるすべての例は、この-Wフラグを使用して2番目のシステムに移動します。 2台目のコンピュータで試してみましたが、うまくいきlocalhostましたが、SSH認証が2回必要でしたが、気に入りませんでした。

2番目のホップに転送せずに内部通話を試みていますsshProxyCommand今私の.ssh/configファイルには次のものがあります。

Host test
    ProxyCommand ssh user@address

これはssh test接続がうまくいくようですが、接続後に入力に応答しない空のプロンプトが表示され、stdin / stdoutが正しく接続されていないようです。

関連質問:

SSH構成エントリで動的に取得されたホスト名の使用

SSH設定ファイルの実行可能スクリプトからホスト名を取得するには?

~/.ssh/config で SSH ホストエントリを動的に生成します。

ベストアンサー1

コマンドを渡さないため、ssh標準入力でコマンドを期待するシェルを実行します。ただし、シェルコマンドを転送するのではなく、SSHトラフィックを転送することです。笑いが続きます。

トンネルはですProxyCommand。この例では、SSH 接続内で SSH 接続をトンネリングします。トンネルを望まない場合、ProxyCommandこれはあなたが探しているものではありません。

OpenSSH 6.4以降、キーワードをMatch含むディレクティブを使用して、実行時execの指示に従ってブロックを条件付きで含めることができます。一般的なユースケースは、ノートブックの場所によって実際のホスト名またはプロキシコマンドが異なる場合です。各MatchブロックはHostブロックを置き換えるため、コマンドの出力を使用してホスト名を解決することはできず、状態0で終了したという事実のみが使用できます。

# Connection inside ACME network
Match host foo exec on-acme-network
HostName foo.acme.local

# Connection from outside ACME
Host foo
HostName foo.example.com

代理人は別のオプションです。接続時に決定されたホスト名とポートへの接続を確立するには、次を使用できます。インターネット猫TCP接続を確立します。

Host foo
ProxyCommand nc $(determine-target-host-name) 22

完全に動的なパイプが必要な場合は、.ssh/config名前付きパイプにしてプロセスを常にパイプに書き込むことができます。それとも、スクリプトファイルシステム

おすすめ記事