encontre o pid da porta tcp aberta, como um usuário normal

encontre o pid da porta tcp aberta, como um usuário normal

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 fuserpara 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 sscom o -pswitch? Você não precisa elevar para rootpara 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'

informação relacionada