Listar todas as sessões SSH conectadas?

161

Eu só tinha o SSH na raiz e depois o SSH novamente na raiz na mesma máquina. Então eu tenho duas janelas abertas SSH em root no meu computador remoto.

No shell, como posso ver uma lista dessas duas sessões?

    
por themirror 26.09.2013 / 23:28

5 respostas

172

who ou w ; who -a para informações adicionais.

Esses comandos mostram apenas todas as sessões de login em um dispositivo terminal. Uma sessão SSH estará em um escravo pseudo-terminal ( pts ) como mostrado na coluna TTY , mas nem todas as conexões pts são sessões SSH. Por exemplo, programas que criam um dispositivo pseudo-terminal, como xterm ou screen , serão mostrados como pts . Veja Diferença entre pts e tty para uma melhor descrição dos diferentes valores encontrados em a coluna TTY . Além disso, essa abordagem não mostrará ninguém que tenha efetuado login em uma sessão SFTP, já que as sessões SFTP não são sessões de login do shell.

Eu não sei de nenhuma maneira de mostrar explicitamente todas as sessões do SSH. Você pode inferir essas informações lendo as informações de login de utmp / wtmp por meio de uma ferramenta como last , w ou who como acabei de descrever ou usando ferramentas de rede como @sebelk descritas em sua resposta para encontrar conexões tcp abertas na porta 22 (ou onde quer que seu (s) daemon (s) SSH esteja (m) escutando).

Uma terceira abordagem que você pode fazer é analisar a saída do log do daemon SSH. Dependendo da sua distribuição de SO, distribuição SSH, configuração e assim por diante, sua saída de log pode estar em vários lugares diferentes. Em uma caixa do RHEL 6, encontrei os logs em /var/log/sshd.log . Em uma caixa do RHEL 7 e também em uma caixa do Arch Linux, precisei usar journalctl -u sshd para exibir os logs. Alguns sistemas podem gerar logs SSH para o syslog. Seus registros podem estar nesses lugares ou em outro lugar. Veja uma amostra do que você pode ver:

[myhost ~]% cat /var/log/sshd.log | grep hendrenj | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

Os registros mostram quando as sessões abrem e fecham, a quem a sessão pertence, onde o usuário está se conectando e muito mais. No entanto, você terá que fazer um lote de análise se quiser obter isso de um simples log de eventos legível por humanos para uma lista de sessões atualmente ativas, e ainda provavelmente ganhou Não é uma lista precisa quando você terminar de analisar, uma vez que os logs não contêm informações suficientes para determinar quais sessões ainda estão ativas - você está apenas tentando adivinhar. A única vantagem que você obtém usando esses logs é que as informações vêm diretamente do SSHD, em vez de uma fonte de segunda mão, como os outros métodos.

Eu recomendo usar apenas w . Na maior parte do tempo, você obterá as informações desejadas.

    
por 26.09.2013 / 23:55
94

Você pode ver cada sessão ssh com o seguinte comando:

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

O talvez isso possa ser útil:

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:
    
por 27.09.2013 / 01:34
11

Você também pode usar

ps ax | grep sshd
    
por 10.05.2016 / 15:33
4

Adicionado para referência simples.

Se você estiver em uma pseudo-concha (exemplo: / dev / pts / 0) uma das maneiras mais simples seria:

[user1@host ~]$ echo $SSH_CONNECTION

Ele deve retornar: seu ip e porta e o ip seu conectado e porta

192.168.0.13 50473 192.168.0.22 22

Você também pode obter algumas informações usando tty ou who ( w ): (editar: vejo agora a lista acima em outro post)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)
    
por 04.01.2018 / 01:48
4

Expandindo a resposta do @ sebelk:

A solução que usa netstat é boa, mas requer privilégios de root. Além disso, o pacote net-tools (que fornece netstat ) foi descontinuado em algumas novas distribuições Linux ( link ).

Uma solução alternativa é usar o substituto para netstat , ss . Por exemplo (note que você não precisa mais de root):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628
    
por 04.05.2018 / 11:22

Tags