ローカル ホストから、リモート ホスト:ポートをローカル ホスト:ポートに 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'