Finden Sie als normaler Benutzer die PID des offenen TCP-Ports

Finden Sie als normaler Benutzer die PID des offenen TCP-Ports

Vom lokalen Host aus tunnele ich per SSH einen Remote-Host:Port zu meinem lokalen Host:Port, sodass jeder auf einem Remote-Host seinen „lokalen“ Port verwenden kann, um über diesen Tunnel auf meinen Port zuzugreifen.

Ich verwende hierfür auf beiden Hosts ein reguläres (kein Root-)Benutzerkonto.

Beispiel: tunnelingdaemon von meinem lokalen Host verbindet sich mit tunnelingdaemon@remotehost ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ..., öffnet Port 2222 auf dem Remote-Host und verbindet ihn mit Port 22 auf meinem lokalen Host.

Root auf dem Remote-Host kann netstat, lsof, oder verwenden fuser, um die PID eines Prozesses zu finden, der diesen Port 2222 geöffnet und getunnelt hat. Normale Benutzer (Tunnelingdaemon) können dies jedoch nicht.

Zum Beispiel

Wurzel:

root@remote_host:/# fuser 2222/tcp
2222/tcp:            13709
root@remote_host:/#

Tunneldämon:

tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$

Auf einem Remote-HostIch kann diesen Prozess als normaler (Tunnelingdaemon-)Benutzer beendenunter dem sich zunächst ein Tunnel befindet, aberIch muss Root sein, um herauszufinden, welchen Prozess ich beenden soll.

Das ist ein Problem. Ich muss dafür eine Lösung finden.

Antwort1

Beispiel: Port „8889“:

lsof -i -P | grep 8889

funktioniert bei mir.

Dann können Sie die PID beenden (zweite Spalte der Ausgabe).

Antwort2

ssVielleicht mal mit dem Schalter versuchen -p? Du brauchst keine Rechte auf zu setzen, rootum diesen Befehl auszuführen.

Ausman ss

   -p, --processes
          Show process using socket.

Beispiel:

ss -p | grep dropbox
u_str  ESTAB      0      0       * 25994                 * 25995                 users:(("dropbox",pid=1869,fd=22))

Antwort3

Sie könnten eine PID-Datei schreiben:

ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'

verwandte Informationen