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
ss
Vielleicht mal mit dem Schalter versuchen -p
? Du brauchst keine Rechte auf zu setzen, root
um 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'