Listar todas as sessões SSH conectadas?

Listar todas as sessões SSH conectadas?

Acabei de fazer o SSH no root e, em seguida, o SSH novamente no root na mesma máquina. Portanto, tenho duas janelas abertas, ambas com SSH na raiz da minha máquina remota.

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

Responder1

whoou w; who -apara obter 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 pseudoterminal ( pts) conforme mostrado na TTYcoluna, mas nem todas as conexões pts são sessões SSH. Por exemplo, programas que criam um dispositivo pseudo-terminal como xtermou screenserão exibidos como pts. VerDiferença entre pontos e ttypara uma melhor descrição dos diferentes valores encontrados na TTYcoluna. Além disso, essa abordagem não mostrará ninguém que esteja conectado a uma sessão SFTP, já que as sessões SFTP não são sessões de login do shell.

Não conheço nenhuma maneira de mostrar explicitamente todas as sessões SSH. Você pode inferir essas informações lendo as informações de login de utmp/ wtmppor meio de uma ferramenta como last, wou whocomo 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 SSH daemon(s) está(ão) escutando).

Uma terceira abordagem que você pode adotar é analisar a saída de log do daemon SSH. Dependendo da distribuição do sistema operacional, distribuição SSH, configuração e assim por diante, a saída do log pode estar em vários locais diferentes. Em uma caixa RHEL 6, encontrei os logs no arquivo /var/log/sshd.log. Em uma caixa RHEL 7, e também em uma caixa Arch Linux, eu precisava usar journalctl -u sshdpara visualizar os logs. Alguns sistemas podem gerar logs SSH para o syslog. Seus registros podem estar nesses locais ou em outros lugares. Aqui está um exemplo do que você pode ver:

[myhost ~]% grep hendrenj /var/log/sshd.log | 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 logs mostram quando as sessões abrem e fecham, a quem a sessão pertence, de onde o usuário está se conectando e muito mais. No entanto, você terá que fazer ummuitode análise se você deseja obter isso de um log de eventos simples e legível para uma lista de sessões atualmente ativas, e ainda assim provavelmente não será uma lista precisa quando você terminar a análise, já que os logs não na verdade, contêm informações suficientes para determinar quais sessões ainda estão ativas - você está apenas adivinhando. A única vantagem que você ganha ao usar 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 apenas usar w. Na maioria das vezes, isso fornecerá as informações que você deseja.

Responder2

Você pode ver todas as sessões 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

Ou 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:



       

Responder3

Expandindo a resposta de @sebelk:

A solução usada netstaté boa, mas requer privilégios de root. Além disso, o net-toolspacote (que fornece netstat) foi descontinuado em algumas distribuições Linux mais recentes (https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/).

Uma solução alternativa é então usar o substituto para netstat, ss. Por exemplo (observe 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

Responder4

Adicionado para referência simples.

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

[user1@host ~]$ echo $SSH_CONNECTION

Deve retornar: seu ip e porta e o ip ao qual você está conectado e porta

192.168.0.13 50473 192.168.0.22 22

Você também pode obter algumas informações usando ttyou who( w): (editar: vejo que agora está listado 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)

informação relacionada