一般ユーザーとして開かれたTCPポートのpidを見つけます。

一般ユーザーとして開かれたTCPポートのpidを見つけます。

私のローカルホストから私のローカルホスト:ポートにいくつかのリモートホスト:ポートを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スイッチを使ってみましょうか-prootこのコマンドを実行するための権限を高める必要はありません。

~から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'

関連情報