encontra pid da porta tcp aberta, como usuário regular

2

Do host local Estou ssh tunelando algum host remoto: porta para meu host local: port, assim qualquer pessoa em um host remoto pode usar sua porta "local" para acessar minha porta através desse túnel.

Estou usando uma conta de usuário regular (não raiz) em ambos os hosts para isso.

Por exemplo: tunnelingdaemon do meu localhost conecta 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 conecta-o à porta 22 em meu host local.

A raiz no host remoto pode usar netstat , lsof ou fuser para encontrar o PID de um processo que abriu e encapsulou essa porta 2222. Mas o usuário comum (tunnelingdaemon) não pode fazer isso.

Por exemplo

root:

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

tunnelingdaemon:

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

Em um host remoto, eu posso matar esse processo como um usuário regular (tunnelingdaemon) sob o qual o túnel é aberto no primeiro lugar, mas eu devo ser root para descobrir qual processo eu deve matar .

Isso é um problema. Eu preciso encontrar uma solução para isso.

    
por Goran 25.11.2017 / 10:16

2 respostas

0

Talvez tente ss com a opção -p ? Você não precisa elevar para root para executar este comando.

De man 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))
    
por 25.11.2017 / 10:34
0

Você pode escrever um arquivo PID:

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