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
who
ou w
; who -a
para 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 TTY
coluna, 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 exibidos como pts
. VerDiferença entre pontos e ttypara uma melhor descrição dos diferentes valores encontrados na TTY
coluna. 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
/ 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 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 sshd
para 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-tools
pacote (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 tty
ou 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)