Primeiras Conexões SSH
Nota: Este é o segundo tutorial da série sobre SSH. Se você perdeu o primeiro, que introduz os conceitos fundamentais, pode encontrá-lo aqui: Introdução ao SSH - Acesso Remoto Seguro.
No tutorial anterior, exploramos o que é o SSH, por que ele é crucial para a segurança e como funciona sua arquitetura cliente-servidor. Agora, é hora de colocar a mão na massa e realizar nossas primeiras conexões seguras! Este tutorial focará principalmente no ambiente de linha de comando comum em sistemas Linux e macOS, onde o cliente OpenSSH é onipresente.
Verificando (ou Instalando) o Cliente OpenSSH
A boa notícia é que, na grande maioria das distribuições Linux modernas e em todas as versões recentes do macOS, o cliente OpenSSH (ssh
) já vem pré-instalado. Para verificar, basta abrir seu terminal e digitar:
1
ssh -V
Você deverá ver uma saída semelhante a esta (a versão exata pode variar):
1
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
Se o comando for encontrado e exibir a versão, você está pronto para prosseguir. Caso receba um erro como “comando não encontrado”, você precisará instalá-lo. O processo varia conforme a distribuição Linux:
- Debian/Ubuntu e derivados:
sudo apt update && sudo apt install openssh-client
- Fedora/CentOS/RHEL:
sudo dnf install openssh-clients
ousudo yum install openssh-clients
- Arch Linux:
sudo pacman -S openssh
Após a instalação, execute ssh -V
novamente para confirmar.
Conexão Inicial via Senha
A forma mais básica de se conectar a um servidor SSH é usando um nome de usuário e uma senha. Embora não seja o método mais seguro (abordaremos a autenticação por chaves no próximo tutorial), é um ponto de partida comum.
A sintaxe básica é:
1
ssh <usuario>@<hostname_ou_ip_do_servidor>
<usuario>
: O nome de usuário que você possui na máquina remota.<hostname_ou_ip_do_servidor>
: O endereço do servidor ao qual você deseja se conectar. Pode ser um nome de domínio (ex:servidor.empresa.com
) ou um endereço IP (ex:192.168.0.254
).
Exemplo Prático (usando a arquitetura de referência):
Vamos tentar conectar ao nosso Servidor KVM (192.168.0.254
) com o usuário user_kvm
:
1
ssh user_kvm@192.168.0.254
A Primeira Conexão e o known_hosts
:
Se esta for a primeira vez que você se conecta a este servidor específico a partir desta máquina cliente, o SSH exibirá uma mensagem semelhante a esta:
1
2
3
The authenticity of host '192.168.0.254 (192.168.0.254)' can't be established.
ED25519 key fingerprint is SHA256:AbCdEfGhIjKlMnOpQrStUvWxYzABCDEFGHIJKLMNO. # Exemplo de fingerprint
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Isso é o SSH fazendo seu trabalho! Ele está dizendo: “Nunca me conectei a este servidor antes. Não tenho como garantir que ele é quem diz ser. Aqui está a ‘impressão digital’ da chave pública dele (a fingerprint). Você confia nele?”.
- O que fazer? Idealmente, você deveria verificar essa fingerprint por um canal seguro (perguntando ao administrador do servidor, por exemplo). Na prática, para a primeira conexão, se você tem certeza de que o IP/hostname está correto, você digita
yes
e pressiona Enter. - O que acontece? Ao digitar
yes
, o SSH adiciona a chave pública do servidor e seu endereço ao arquivo~/.ssh/known_hosts
na sua máquina local. Este arquivo funciona como um “caderno de identidades” dos servidores aos quais você já se conectou.
Fornecendo a Senha:
Após confirmar a chave do host (se for a primeira conexão), o servidor solicitará a senha do usuário:
1
user_kvm@192.168.0.254's password:
Digite a senha do usuário user_kvm
no servidor 192.168.0.254
. Atenção: Por segurança, nada aparecerá na tela enquanto você digita a senha (nem asteriscos). Apenas digite a senha e pressione Enter.
Se a senha estiver correta, você será conectado e verá o prompt de comando do servidor remoto! Parabéns, você realizou sua primeira conexão SSH!
Execução Remota de Comandos Simples
Nem sempre você precisa de um shell interativo completo. Às vezes, você só quer executar um único comando no servidor remoto e ver o resultado. O SSH permite isso diretamente:
1
ssh <usuario>@<hostname_ou_ip> '<comando_a_executar>'
Note que o comando a ser executado no servidor remoto é colocado entre aspas simples ('
) ou duplas ("
).
Exemplo Prático:
Vamos verificar o tempo que o Servidor KVM está ligado (uptime
) sem iniciar uma sessão completa:
1
ssh user_kvm@192.168.0.254 'uptime'
O SSH se conectará, autenticará (pedirá a senha se necessário) e executará o comando uptime
no servidor remoto, exibindo a saída diretamente no seu terminal local e, em seguida, desconectará.
Flags Essenciais do Comando ssh
O comando ssh
possui muitas opções (flags), mas algumas são particularmente úteis no dia a dia:
-p <porta>
(Porta Não Padrão): Por padrão, o SSH tenta se conectar à porta 22/TCP. Se o administrador do servidor configurou o SSH para rodar em uma porta diferente (uma prática comum para ofuscação), você precisa especificá-la com a flag-p
.- Exemplo:
ssh -p 2222 user_kvm@192.168.0.254
(conecta à porta 2222).
- Exemplo:
-v
,-vv
,-vvv
(Modo Verboso/Debug): Extremamente útil para diagnosticar problemas de conexão! Cadav
aumenta o nível de detalhe que o cliente SSH exibe sobre o processo de conexão.-v
: Nível básico de debug (útil para ver negociação inicial).-vv
: Mais detalhes sobre a troca de chaves e autenticação.-vvv
: Nível máximo de detalhes (pode ser bastante extenso).- Como interpretar a saída: Procure por mensagens de erro óbvias, veja em qual etapa a conexão falha (negociação, autenticação?), verifique quais métodos de autenticação estão sendo tentados. Geralmente, as últimas linhas antes da falha contêm a pista mais importante.
- Exemplo:
ssh -v user_kvm@192.168.0.254
-i /caminho/para/chave_privada
(Especificar Chave): Quando você começar a usar autenticação por chave pública (próximo tutorial), o SSH tentará usar chaves com nomes padrão (como~/.ssh/id_ed25519
ou~/.ssh/id_rsa
). Se você salvou sua chave privada com um nome diferente ou em outro local, use a flag-i
para indicar o caminho correto.- Exemplo:
ssh -i ~/.ssh/chave_especial user_kvm@192.168.0.254
- Exemplo:
Gerenciando Chaves de Host (~/.ssh/known_hosts
)
Como vimos, o arquivo ~/.ssh/known_hosts
é crucial para a segurança, pois armazena as identidades dos servidores aos quais você se conecta, ajudando a prevenir ataques Man-in-the-Middle (MITM).
Aviso de Chave Alterada (RISCO DE MITM!):
Se, em uma conexão futura a um servidor que já está no seu known_hosts
, a chave de host apresentada pelo servidor for diferente daquela armazenada, o cliente SSH recusará a conexão e exibirá um aviso ALARMANTE, semelhante a este:
1
2
3
4
5
6
7
8
9
10
11
12
13
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:NovoFingerprintDiferenteXXXXXXXXXXXXXXXXXXXXXXXX.
Please contact your system administrator.
Add correct host key in /home/seu_usuario/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/seu_usuario/.ssh/known_hosts:5 # Linha no arquivo
Password authentication is disabled to avoid man-in-the-middle attacks.
Host key verification failed.
NUNCA ignore este aviso levianamente! Ele pode significar:
- Ataque Man-in-the-Middle: Alguém interceptou sua conexão e está se passando pelo servidor real. Conectar-se seria desastroso.
- Mudança Legítima da Chave: O administrador do servidor reinstalou o sistema operacional, regenerou as chaves SSH do servidor por segurança, ou moveu o serviço para outra máquina.
- O que fazer? PARE. Entre em contato com o administrador do servidor por um canal seguro para confirmar se a chave realmente mudou e obter a nova fingerprint correta. Não conecte até ter certeza.
Removendo Entradas Inválidas/Antigas (ssh-keygen -R
):
Se você confirmou que a mudança da chave foi legítima, ou se simplesmente não precisa mais da entrada antiga no seu known_hosts
(por exemplo, um servidor que foi desativado), você precisa remover a entrada ofensiva antes de poder conectar novamente (e aceitar a nova chave).
A maneira mais fácil e segura de fazer isso é usando o comando ssh-keygen
com a flag -R
(Remove):
1
ssh-keygen -R '<hostname_ou_ip_do_servidor>'
Este comando removerá todas as chaves associadas a esse hostname ou IP do seu arquivo known_hosts
padrão (~/.ssh/known_hosts
).
Exemplo Prático:
Para remover a chave antiga do nosso Servidor KVM (192.168.0.254
):
1
ssh-keygen -R '192.168.0.254'
Você verá uma mensagem indicando que o arquivo known_hosts
foi atualizado. Na próxima tentativa de conexão (ssh user_kvm@192.168.0.254
), o SSH agirá como se fosse a primeira vez, pedindo para você confirmar a nova chave.
Dica: Se seu arquivo known_hosts
não estiver no local padrão, você pode especificar o caminho com a flag -f
: ssh-keygen -f /caminho/alternativo/known_hosts -R '192.168.0.254'
.
Sessão Interativa: Comandos e Desconexão
Uma vez conectado a um servidor via SSH, você terá um prompt de comando, muito similar ao seu terminal local, mas todos os comandos que você digitar serão executados no servidor remoto.
- Executando Comandos: Use o shell remoto como usaria o local:
ls -l
,cd /var/log
,grep error messages.log
,sudo apt update
, etc. - Encerrando a Sessão: Para desconectar de forma limpa, digite
exit
oulogout
e pressione Enter. Você também pode usar o atalho de tecladoCtrl+D
.
Menção Breve: Clientes GUI (PuTTY, Termius)
Embora este tutorial foque na linha de comando, é importante saber que existem clientes SSH com interface gráfica (GUI), especialmente populares no Windows:
- PuTTY: Um clássico para Windows, leve e funcional. Permite salvar configurações de sessão (hostname, porta, usuário, etc.).
- Termius: Um cliente moderno e multiplataforma (Windows, macOS, Linux, iOS, Android) com recursos adicionais como sincronização de configurações, SFTP integrado, etc. (possui versões gratuitas e pagas).
- MobaXterm (Windows): Outra opção popular para Windows, com muitos recursos integrados (servidor X11, SFTP, etc.).
Esses clientes podem ser mais amigáveis para iniciantes ou para gerenciar muitas conexões salvas, mas entender a linha de comando é fundamental para automação e para um conhecimento mais profundo.
Dica Rápida: Sequências de Escape (~.
)
Às vezes, a conexão SSH pode travar ou ficar sem resposta, e digitar exit
ou Ctrl+D
não funciona. O cliente OpenSSH possui sequências de escape para controlar a conexão localmente.
A mais útil é ~.
(til seguido de ponto). Para usá-la:
- Pressione
Enter
(para garantir que o til não seja interpretado como parte de um comando anterior). - Digite
~
(til). - Digite
.
(ponto).
Isso deve forçar o encerramento da conexão SSH pelo lado do cliente.
Outra sequência útil é ~?
, que lista todas as sequências de escape disponíveis.
Conclusão
Neste tutorial, demos os primeiros passos práticos com o SSH. Aprendemos a verificar o cliente, conectar via senha, executar comandos remotamente, usar flags importantes como -p
e -v
, e, crucialmente, entendemos a importância do arquivo known_hosts
e como gerenciá-lo com ssh-keygen -R
. Também vimos como encerrar sessões e mencionamos alternativas GUI e sequências de escape.
Embora a conexão por senha seja um começo, ela não é ideal em termos de segurança e conveniência. No próximo tutorial, mergulharemos no método de autenticação preferido e muito mais seguro: chaves públicas SSH. Prepare-se para abandonar as senhas!