web-dev-qa-db-ja.com

1つのコマンドでsshトンネルチェーンを作成するにはどうすればよいですか?

接続するserverAがあります。次に、serverAを使用してdatabaseBに接続します。 PuTTY(ウィンドウ)でこのように設定します。

Session1:
1。 admin @serverAに接続します
2。トンネルローカルポート10022をdatabaseB:22にセットアップします
3。 'vi'を実行します

セッション2:
1。 admin @ localhost:10022に接続します
2。データベース1521へのトンネルローカルポート1521のセットアップ
3。 'vi'を実行します

(viはセッションを保持するために使用されます)

次に、プログラムはデータベース接続にlocalhost:1521を使用します。

Cygwinの単一のコマンドまたはバッチファイルでそれを実行できるかどうか疑問に思いますか? serverAのポートを開くことができないことに注意してください

7
jackysee
ssh -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB

またはコマンドウィンドウからplink(PuTTYリンク)を使用します。

plink -ssh -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB
8

これを単一のコマンドとして実行することに関しては、前の答えは正しいですが、2番目のsshにパスワードが必要な場合は、おそらく機能しません(sshのデフォルト構成によって異なります)。次のように、-tオプションを使用して、疑似ttyの割り当てを強制する必要があります。

ssh -t -L 1521:127.0.0.1:61521 admin@serverA ssh -L 61521:127.0.0.1:1521 admin@databaseB

(これはcygwinのsshコマンドを使用して機能します)

3

そのためにProxyCommandオプションを使用できます。以下をssh構成ファイル(通常は~/.ssh/configにあります)に入れます。

Host direct-serverB
ProxyCommand ssh admin@serverA ssh admin@serverB sshd -i

次に、直接利用可能であるかのようにserverBに接続できます。

% ssh -L 1521:localhost:1521 admin@direct-serverB

このコマンド開かない中間サーバー上の任意のポートA。ただし、serverAとローカルマシンの両方からserverBに対して認証する必要があるという欠点があります。

ServerAにnetcatがインストールされている場合は、これをssh構成に書き込むことができます。

Host direct-serverB
ProxyCommand ssh admin@serverA nc -q0 serverB 22

そして、serverA→serverB認証ステップをドロップします。

3
liori

私は実行してみます:

ssh admin@serverA -L 10022:databaseB:22
ssh admin@localhost -p 10022 -L 1521:database2:1521

しかし、男、私はそれを示唆することさえしがみついています。 DatabaseBをファイアウォールで保護した人々には、おそらくそうする正当な理由がありました。彼らと話してください。

1
sarnold

以下は私のために働いたものです。
-私の目標は、クライアントアプリケーションをlocalhost:1115にポイントし、実際にtarget_db_server:1433に接続することでした。
-target_db_serverには、jumpserver2からのみアクセスできます。
-jumpserver2には、jumpserver1からのみアクセスできます。
-したがって、コマンドはjumpserver1に接続し、トークンの入力を求め(私の場合)、次にjumpserver2に接続してそのサーバーのパスワードを要求すると、ローカルクライアントが接続を確立できます。

ssh -L 1115:127.0.0.1:1115 username@jumpserver1 -tt ssh -L 1115:target_db_server:1433  username@jumpserver2

接続がタイムアウトすることがわかりましたが、これは理想的ではありませんでした。以下はそれを修正しました:

echo "Host *" >> ~/.ssh/config
echo "ServerAliveInterval 60" >> ~/.ssh/config
0
Dan