Do host local, estou encapsulando ssh algum host:port remoto para meu host:port local, para que qualquer pessoa em um host remoto possa usar sua porta "local" para acessar minha porta através desse túnel.
Estou usando uma conta de usuário regular (não root) em ambos os hosts para isso.
Por exemplo: tunnelingdaemon do meu host local conecte tunnelingdaemon@remotehost usando ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...
e abre a porta 2222 no host remoto e conecte-a à porta 22 no meu host local.
Root no host remoto pode usar netstat
, lsof
, ou fuser
para encontrar o PID de um processo que abriu e tunelou aquela porta 2222. Mas o usuário normal (tunnelingdaemon) não pode fazer isso.
Por exemplo
raiz:
root@remote_host:/# fuser 2222/tcp
2222/tcp: 13709
root@remote_host:/#
daemon de tunelamento:
tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$
Em um host remoto,Posso encerrar esse processo como um usuário normal (tunnelingdaemon)sob o qual o túnel foi aberto em primeiro lugar, masDevo ser root para descobrir qual processo devo matar.
Isso é um problema. Preciso encontrar uma solução para isso.
Responder1
Por exemplo, porta "8889":
lsof -i -P | grep 8889
funciona para mim.
Então você pode matar o PID (segunda coluna da saída)
Responder2
Talvez tente ss
com o -p
switch? Você não precisa elevar para root
para executar este comando.
Deman ss
-p, --processes Show process using socket.
Exemplo:
ss -p | grep dropbox
u_str ESTAB 0 0 * 25994 * 25995 users:(("dropbox",pid=1869,fd=22))
Responder3
Você poderia escrever um arquivo PID:
ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'