Acabei de fazer o SSH no root e depois novamente no root na mesma máquina. Então, eu tenho duas janelas que abrem o SSH na raiz da minha máquina remota.
No shell, como posso ver uma lista dessas duas sessões?
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.
who -a
comandoVocê pode ver todas as sessões ssh com o seguinte comando:
O talvez isso possa ser útil:
fonte
pgrep -ai sshd
pgrep: invalid option -- 'i'
no Ubuntu 14.04.-i
está disponível apenas nos sabores mac / bsd. no ubuntu você pode usarpgrep -af ssd
. Veja serverfault.com/a/883270/116777 para obter detalhesVocê também pode usar
fonte
Adicionado para referência simples.
Se você estiver em um pseudo shell (exemplo: / dev / pts / 0), uma das maneiras mais simples seria:
Ele deve retornar: seu ip e porta e o ip conectado e porta
Você também pode obter algumas informações usando
tty
ouwho
(w
): (editar: agora vejo a lista acima em outro post)fonte
SECONDS
global. Você pode usar isso viaecho $SECONDS
, que então exibe a quantidade de tempo, desde a conexão percebidaExpandindo a resposta da @ sebelk:
A solução utilizada
netstat
é boa, mas requer privilégios de root. Além disso, onet-tools
pacote (que fornecenetstat
) 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):fonte
Você pode usar
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.
fonte
last
pode não estar listada.last
suportes-p
? O que isso faz?"last from util-linux 2.31.1"
tem com certeza.