Respostas:
who
ou w
; who -a
para informações adicionais.
Esses comandos apenas mostram todas as sessões de login em um dispositivo terminal. Uma sessão SSH estará em um escravo pseudo-terminal ( pts
), como 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
. Consulte Diferença entre pts e tty para obter uma descrição melhor dos diferentes valores encontrados na TTY
coluna. Além disso, essa abordagem não mostrará quem está conectado a uma sessão SFTP, pois as sessões SFTP não são sessões de logon no 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
através 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á / escutando).
Uma terceira abordagem que você pode adotar é analisar a saída do log do daemon SSH. Dependendo da distribuição do SO, da distribuição SSH, da 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 /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á 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 logs mostram quando as sessões são abertas e fechadas, a quem pertence a sessão, de onde o usuário está se conectando e muito mais. No entanto, você precisará fazer muitas análises se desejar obter isso de um registro de eventos simples, legível por humanos, para uma lista de sessões ativas no momento, e ainda assim provavelmente não será uma lista precisa quando você terminou de analisar, já que os logs não contêm informações suficientes para determinar quais sessões ainda estão ativas - você está apenas adivinhando. A única vantagem que você obtém usando esses logs é que as informações vêm diretamente do SSHD, e não através de uma fonte de segunda mão, como os outros métodos.
Eu recomendo apenas usar w
. Na maioria das vezes, isso fornece as informações que você deseja.
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
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:
pgrep -ai sshd
pgrep: invalid option -- 'i'
no Ubuntu 14.04.
-i
está disponível apenas nos sabores mac / bsd. no ubuntu você pode usar pgrep -af ssd
. Veja serverfault.com/a/883270/116777 para obter detalhes
Você também pode usar
ps ax | grep sshd
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
Ele deve retornar: seu ip e porta e o ip 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: agora vejo 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)
SECONDS
global. Você pode usar isso via echo $SECONDS
, que então exibe a quantidade de tempo, desde a conexão percebida
Expandindo a resposta da @ sebelk:
A solução utilizada 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 é, em seguida, 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
Você pode usar
last | head
Eu usei isso no meu script .login por anos para ver quem havia entrado recentemente no sistema. Era um dispositivo de segurança para ver se havia alguém no sistema usando seu login.
last
pode não estar listada.
last
suportes -p
? O que isso faz?
"last from util-linux 2.31.1"
tem com certeza.
who -a
comando