pgrep
、、などのユーザーに敬意を表して、pkill
はるかに優れた方法があります。ps | awk
ps -aux | grep ...
プロセスを見つけることに依存している場合は、衝突のリスクがあることを考慮してください。それが起こりそうにないユースケースがあるかもしれませんが、原則として、それは進むべき道ではありません。
SSHは、バックグラウンドプロセスを管理および制御するためのメカニズムを提供します。しかし、多くのSSHのものと同様に、これは「高度な」機能であり、多くの人(ここでの他の回答から)はその存在に気づいていません。
私自身の使用例では、自宅にワークステーションがあり、その上にオフィスの内部ネットワーク上のHTTPプロキシに接続するトンネルを残し、別のワークステーションを使用して、同じ場所にあるサーバーの管理インターフェイスにすばやくアクセスできます。 。これは、自宅から開始される基本的なトンネルを作成する方法です。
$ ssh -fNT -L8888:proxyhost:8888 -R22222:localhost:22 officefirewall
$ ssh -fNT -L4431:www1:443 -L4432:www2:443 colocatedserver
これらにより、sshがバックグラウンドになり、トンネルが開いたままになります。しかし、トンネルがなくなった場合、私は立ち往生しています。それを見つけたい場合は、プロセスリストを解析する必要があり、ホームに「正しい」sshがあります(誤って複数のsshを起動した場合に備えて)似ている)。
代わりに、複数の接続を管理する場合は、SSHのControlMaster
configオプションと、-O
制御用のコマンドラインオプションを使用します。たとえば、私の~/.ssh/config
ファイルに次のようにすると、
host officefirewall colocatedserver
ControlMaster auto
ControlPath ~/.ssh/cm_sockets/%r@%h:%p
上記のsshコマンドを実行すると、spoorが残り、~/.ssh/cm_sockets/
制御用のアクセスを提供できます。次に例を示します。
$ ssh -O check officefirewall
Master running (pid=23980)
$ ssh -O exit officefirewall
Exit request sent.
$ ssh -O check officefirewall
Control socket connect(/home/ghoti/.ssh/cm_socket/ghoti@192.0.2.5:22): No such file or directory
そしてこの時点で、ハンマー(、、、など)を使用する必要なしに、トンネル(およびSSHセッションの制御)はなくなりkill
ます。killall
pkill
これをユースケースに戻します...
syngergyc
TCPポート12345で通信するトンネルを確立していますsyngergys
。そのために、次のようなことを行います。
~/.ssh/config
ファイルにエントリを追加します。
Host otherHosttunnel
HostName otherHost
User otherUser
LocalForward 12345 otherHost:12345
RequestTTY no
ExitOnForwardFailure yes
ControlMaster auto
ControlPath ~/.ssh/cm_sockets/%r@%h:%p
コマンドライン-L
オプションはLocalForward
キーワードで処理され、トンネルが確立された後に確実に制御できるように、Control {Master、Path}行が含まれていることに注意してください。
次に、bashスクリプトを次のように変更します。
#!/bin/bash
if ! ssh -f -N otherHosttunnel; then
echo "ERROR: couldn't start tunnel." >&2
exit 1
else
synergyc localhost
ssh -O exit otherHosttunnel
fi
この-f
オプションはトンネルをバックグラウンドで処理し、後でトンネルを閉じるためにControlPathにソケットを残します。sshが失敗した場合(ネットワークエラーまたはが原因である可能性がありますExitOnForwardFailure
)、トンネルを終了する必要はありませんが、失敗しなかった場合(else
)、synergycが起動され、トンネルが終了した後にトンネルが閉じられます。
また、SSHオプションLocalCommand
を使用しsynergyc
てssh構成ファイル内から直接起動できるかどうかを調べることもできます。