Gerenciando conexões SSH

9

Em um servidor Linux, como eu encontraria uma lista de todas as conexões SSH atuais ou desconectaria uma conexão SSH específica?

Cerin
fonte
Você está interessado em conexões SSH recebidas ou enviadas? ou ambos?
Shawn Chin
2
Esta questão é mais relevante para superusuário
Estou interessado apenas em conexões de entrada.
Cerin

Respostas:

13

Se você planeja fazer isso de maneira interativa, o mais simples seria simplesmente chamar whoe ver se há usuários de um host remoto.

[you@host]$ who
user1      :0           Feb  8 09:45
user1      pts/1        Feb 14 17:56 (:0.0)
malcolm    pts/3        Feb 15 17:50 (cockpit.serenity.com)
reynold    pts/2        Feb 15 17:48 (host123.firefly.co.uk)

Obviamente, isso não é infalível, mas é extremamente simples de digitar sob demanda e processar facilmente com o olho humano.

Como o @gravyface apontou, se você incluir uma -uopção who, também imprimirá o PID associado ao qual você poderá passar killpara encerrar uma conexão.

Shawn Chin
fonte
1
-ulhe dará o PID.
Gravyface
este não mostra os IPs se houver várias conexões em um usuário
Alguém
Por alguma razão, isso não funcionou. Em uma máquina remota, entrei na minha máquina usando ssh e, na minha máquina, executei a who -u. Matar o pid não encerrou a conexão na minha máquina remota. No entanto, depois que fiz uma lsof -i | grep ":ssh" sugestão na resposta do @kce, recebi um pid diferente; matar esse processo encerrou a conexão. Talvez haja vários processos iniciados por causa de uma conexão ssh e matarem o exibido por quem não encerra a conexão; essa é a minha explicação.
Neo M Hacker
8

Que tal usar lsof?

# lsof -i |grep ":ssh"

sshd    1943      root    3u  IPv6   5698       TCP *:ssh (LISTEN)
sshd    1943      root    4u  IPv4   5700       TCP *:ssh (LISTEN)
sshd    3217      root    3r  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3220      user1   3u  IPv4   9687       TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd    3327      root    3r  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd    3330      user2   3u  IPv4  10595       TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)

Você deve ser capaz de eliminar a conexão incorreta (por exemplo, desconectar o usuário2):

# kill -9 3330

fonte
3
Use lsof -i tcp:22e você não precisará do grep.
Shawn Chin
Somente se você executar o sshe não especificar a -popção ..
Jindra Helcl 24/04
1

Para visualizar as conexões ssh, você pode fazer um netstat -atn | grep ':22'. Ele mostra todas as conexões na porta 22.

Para interromper a conexão, você pode tentar encontrar o PID do sshd (SSH Daemon) com ps-ax.

Edit: Eu acho que você pode encontrar o PID de sua bashsessão (ou shell equivalente). Matar isso deve deixá-los bem.

Outro recurso: este tópico tem algumas dicas sobre o assunto.

Por favor, trate seus mods bem.
fonte
Não tenho conexões ativas na minha máquina atual, mas o netstat ainda lista uma conexão tcp e tcp6. O que eu faria com o PID do sshd? Você está sugerindo que eu deveria matar o servidor SSH inteiro apenas para interromper uma única conexão?
Cerin
@Cerin Essas duas conexões mostram que ele está escutando essas portas (somente)
Você não especificou, mas eu tenho que pensar nisso. Desculpe: /
Por favor, trate seus mods bem.
0

Tente o seguinte:

$ ps aux | grep sshd

Para desconectá-los, você pode kill PID(onde PIDestá o ID do processo na segunda coluna), se você tiver privilégios de root ou o usuário em questão.

ltn100
fonte
Este sshd só mostra está sendo executado e o usuário a conexão foi estabelecida com (não o número de conexões, o IP é de)