私のローカルホストから私のローカルホスト:ポートにいくつかのリモートホスト:ポートをSSHトンネリングしているので、リモートホストの誰でも「ローカル」ポートを使用してそのトンネルを介して自分のポートにアクセスできます。
これを行うには、両方のホストでいくつかの一般的な(ルートではない)ユーザーアカウントを使用します。
例:TunnelingdaemonはTunnelingdaemon @ remotehostを使用して自分のローカルホストから接続ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...
し、リモートホストでポート2222を開き、ローカルホストのポート22に接続します。
リモートホストのルートはnetstat
、、、lsof
またはを使用してfuser
ポート2222を開いてトンネリングするプロセスのPIDを見つけることができます。ただし、一般ユーザー(tunnelingdaemon)はこれを行うことはできません。
例えば
根:
root@remote_host:/# fuser 2222/tcp
2222/tcp: 13709
root@remote_host:/#
トンネルデーモン:
tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$
リモートホストでは一般ユーザー(tunnelingdaemon)としてプロセスを終了できます。その下でトンネルが初めて開かれたが、どのプロセスを終了するかを調べるには、root権限が必要です。。
これは問題です。これに対する解決策を見つける必要があります。
答え1
たとえば、ポート「8889」は次のようになります。
lsof -i -P | grep 8889
私のために動作します。
その後、PIDを終了できます(出力の2番目の列)。
答え2
ss
スイッチを使ってみましょうか-p
?root
このコマンドを実行するための権限を高める必要はありません。
~からman ss
-p, --processes Show process using socket.
例:
ss -p | grep dropbox
u_str ESTAB 0 0 * 25994 * 25995 users:(("dropbox",pid=1869,fd=22))
答え3
PIDファイルを作成できます。
ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'