シェルスクリプトからバックグラウンドプロセスとしてトンネルを管理する方法


19

シェルスクリプトからいくつかのsshトンネルを設定する必要があります。私はそれらをbgタスクとして実行しようとしました:

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

しかし、トンネルをそのように起動すると、トンネルは正しく機能しないようです。

独自のタブで手動で設定するとうまく機能するので、次のアイデアは、スクリプトでターミナルの新しいタブを開き、そこにあるコマンドをフォアグラウンドプロセスとして実行することです。

注:この質問はもともと「シェルから新しいターミナルタブを起動してコマンドを実行する方法は?」でしたが、トンネルの処理について2つの回答がありました。「シェルを開く」質問については、動作するSuperUserでこれを見つけましたが、バックグラウンドの新しいタブは、開いているフォアグラウンドウィンドウよりも望ましいでしょう。


サーバーへのアクティブなSSHセッションを維持していますか?つまり、バックグラウンドでトンネルがあり、実際に作業しているフォアグラウンドSSHセッションがありますか?
ジャックM.

これまで、3つのタブを開いたままにしました。各トンネルに1つ、さらに何にでも1つです。私の実際の作業のほとんどは、Eclipseとブラウザーで行われます。
-sprugman

(トンネルは、ローカルTomcatインスタンスからいくつかのリモート
データベースに

回答:


25

これは技術的には質問に対する答えではなく、説明した問題に対する答えです。sshコマンドには、役立つ2つのスイッチがあります。

ssh -f -N -L 3000:server1:5029 me@server2

sshに、必要なパスワードを要求するのに十分な長さだけフォアグラウンドで動き回り、それからバックグラウンドに入れて、リモートコマンドを実行せずにトンネルを処理するように指示します。

本当にこれをタブに表示したい場合は、別のソリューションが必要になる場合があります。


キーを設定したので、パスワードを入力する必要はありませんが、それはうまくいくようです。ありがとう!1つの質問:トンネルにアクセスして、タイムアウトしたかどうかを確認したり、トンネルを終了したりするにはどうすればよいですか?それらへのハンドルjobspsリストもしません
。...-sprugman

2
ps -wwajx | grep sshはプロセスを表示するはずです。その後、必要に応じてプロセスを強制終了できます。
-zzz

2
最後に-fプロセスを省略してバックグラウンドで処理する場合は、スクリプトでトンネルプロセスを&強制終了するための$!ハンドルとしてPIDを取得できます。
bk138

6

トンネルを「何でも1つの」接続に統合することをお勧めします。~/.ssh/configファイルに適切なエントリを追加することで簡単にできます:

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

その後、次を実行するだけでログインできます。

> ssh server2

トンネルが起動して動作を開始し、「何でも」を実行する単一のSSHインスタンスが残ります。に2番目の接続を開く必要がある場合server2、エラーが発生する可能性があります。

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

これはあなたの目以外を傷つけません。他のサーバーに同様の行を追加することで、複数のサーバーにこれらの転送を設定することもできます。これはすべて自動的に行われます。


@zzzの答えは、ほぼ同じことをしているようで、もう少し簡単です。でもありがとう。
sprugman

これは、-f -Nオプションと組み合わせて、1回のショットで複数のポートの転送を設定する優れた方法です。ありがとう。
ナルスク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.