Resposta a 1 & amp; 2:
O aviso é de netstat
, não de grep
e é sobre a coluna PID/Program name
da netstat
output:
$ netstat -tapen
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
Usando sudo
:
$ sudo netstat -tapen
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
O alerta é auto-explicativo, você tem que ser root
para ver os IDs de processo e nomes de programas pertencentes a outros (todos) usuários, caso contrário você só receberá os nomes PID de programas de sua propriedade as listagens de soquete aberto para esses processos.
A distinção é basicamente resumida pela seguinte, de man netstat
:
PID/Program name
Slash-separated pair of the process id (PID) and process name of
the process that owns the socket. --program causes this column to
be included. You will also need superuser privileges to see this
information on sockets you don't own. This identification information is
not yet available for IPX sockets.
No seu caso, o programa sshd
é de propriedade de root
, portanto, sem usar sudo
, todas as informações do soquete aparecerão na saída, não o nome do programa e o PID. Como resultado, ao usar grep
no resultado de netstat -taepn
, você está recebendo o aviso.
Por outro lado, se você usar sudo
, o nome do PID / programa aparecerá na netstat -taepn
output e você poderá usar grep
para encontrar a saída.
A seguir, você ficará mais claro (verifique a última coluna (PID / nome do programa)):
$ netstat -tapen
PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 11088 -
$sudo netstat -taepn
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 11088 1002/sshd
Se você estiver executando isso a partir de uma máquina cliente, poderá ignorá-la, pois o processo nesse caso será ssh
(não sshd
) e será de sua propriedade.
Resposta para 3:
Existem muitas maneiras. Eu adicionarei alguns:
$ sudo netstat -taepn | grep "ssh" | tr -s ' ' | cut -d' ' -f4 | head -1
192.168.5.3:22
$ sudo netstat -taepn | grep -Po "\b(\d|\.)+:22(?= .*ssh)"
192.168.5.3:22
$ sudo netstat -taepn | sed -nr '/ssh/s/.* ([^:]+:22) .*//p'
192.168.5.3:22
EDITAR: Sem sudo
:
$ netstat -taepn 2>/dev/null | grep ":22 " | tr -s ' ' | cut -d' ' -f4 | head -1
192.168.5.3:22
$ netstat -taepn 2>/dev/null | grep -Po "\b(\d|\.)+:22\b"
192.168.5.3:22
$ netstat -taepn 2>/dev/null | sed -nr '/:22 /s/.* ([^:]+:22) .*//p'
192.168.5.3:22
EDIT 2:
Se você deseja obter o endereço IP remoto conectado à porta 22 ( ssh
) do servidor sem usar sudo
, o melhor seria ler as estatísticas do soquete via comando ss
e obter a saída desejada disso.
$ ss -ant | grep -Po "(\d|\.)+:22\s+\K[^:]+"
192.168.6.4
$ ss -ant | sed -nr 's/.*([0-9]|\.)+:22 +([^:]+).*//p'
192.168.6.4
$ ss -ant | grep -e "ESTAB" | grep ":22" | tr -s ' ' | cut -d' ' -f5 | cut -d':' -f1
192.168.6.4
Executamos os comandos acima no servidor e 192.168.6.4
é o endereço IP do computador remoto conectado ao servidor via ssh
na porta 22.