Ubuntu SSH

O SSH (Secure Shell, "shell seguro") abre um terminal em outra máquina, pela rede, com tudo criptografado. É assim que se administra praticamente todo servidor Linux do mundo. Nesta aula, a Ana vai acessar a máquina servidor (192.168.0.50) a partir do notebook.

Você vai aprender
  • A diferença entre cliente e servidor SSH, e como instalar o servidor.
  • O que acontece na primeira conexão (a pergunta do fingerprint).
  • Criar uma chave e entrar sem senha, passo a passo.
  • Criar apelidos no ~/.ssh/config para digitar só ssh servidor.
  • Resolver os erros mais comuns: Permission denied, Connection refused, timed out e o aviso de identificação alterada.

Cliente e servidor

Toda conexão SSH tem dois lados:

LadoProgramaOnde rodaJá vem instalado?
ClientesshNa máquina de onde você digita (o notebook)Sim, no Desktop e no Server
Servidorsshd, pacote openssh-serverNa máquina que você quer acessarSó se for escolhido na instalação do Server

Pense numa ligação telefônica: o cliente liga, o servidor atende. Se ninguém atende do outro lado (servidor não instalado ou desligado), a ligação não completa.

Instalar o servidor SSH

Na máquina que vai receber conexões (aqui, o servidor), instale o pacote e confira o serviço:

$ sudo apt install openssh-server
$ systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; disabled; preset: enabled)
     Active: active (running) since Thu 2026-10-15 10:12:04 -03; 3s ago      « rodando
TriggeredBy: ● ssh.socket                                                     « ligado pelo socket
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1102 (sshd)

No Ubuntu atual, o SSH é ativado pelo ssh.socket: o serviço só "acorda" quando chega a primeira conexão. Por isso o ssh.service pode aparecer como disabled e mesmo assim funcionar. Se o firewall estiver ligado, libere a porta: sudo ufw allow ssh (veja Firewall (ufw)).

Descubra o IP do servidor com hostname -I, rodado nele:

$ hostname -I
192.168.0.50

Primeira conexão

ssh
O cliente SSH.
ana
O usuário no servidor. Pode ser diferente do seu usuário local.
@
"em".
192.168.0.50
O endereço do servidor: IP ou nome.
$ ssh ana@192.168.0.50
The authenticity of host '192.168.0.50 (192.168.0.50)' can't be established.     « "não conheço esta máquina"
ED25519 key fingerprint is SHA256:Xk3v9Qm1d7Y2pLwZ0aTnR5cB8eHfJ4uVgK6sNoP1qEw.   « a "impressão digital" dela
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes        « digite yes por extenso
Warning: Permanently added '192.168.0.50' (ED25519) to the list of known hosts.
ana@192.168.0.50's password:                                                     « a senha da ana NO SERVIDOR
Welcome to Ubuntu 26.04.1 LTS (GNU/Linux 7.0.0-38-generic x86_64)
…
Last login: Wed Oct 14 18:02:11 2026 from 192.168.0.15

Depois do login, o prompt muda para ana@servidor:~$. Tudo que você digitar agora roda no servidor:

$ hostname
servidor
$ exit
logout
Connection to 192.168.0.50 closed.                « de volta ao notebook

O que é o fingerprint?

Cada servidor SSH tem uma chave própria, e o fingerprint é um resumo dela, como uma impressão digital. Na primeira conexão, o cliente não tem como saber se está falando com o servidor certo, então pergunta. Ao responder yes, o fingerprint fica guardado em ~/.ssh/known_hosts. Nas próximas vezes, o cliente compara: se mudar, ele bloqueia a conexão e avisa (veja "Quando não funciona").

Como conferir de verdade

No próprio servidor, rode ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub e compare com o que apareceu na pergunta. Em rede de casa isso é exagero; em servidores na internet é uma boa prática.

O que o ssh devolve

O ssh devolve o código de saída do último comando que rodou no servidor, ou 255 se a própria conexão falhou. Isso permite usá-lo em scripts.


Login por chave, passo a passo

Digitar senha toda vez é chato e menos seguro: senhas podem ser adivinhadas. Com chaves, você gera um par de arquivos no notebook:

  • Chave privada (id_ed25519): fica só com você, como a chave de casa. Nunca envie a ninguém.
  • Chave pública (id_ed25519.pub): vai para os servidores, como uma fechadura que só a sua chave abre.
  1. Gere o par de chaves no notebook.

    ssh-keygen
    O gerador de chaves (key generator).
    -t ed25519
    O tipo de chave. ed25519 é moderno, curto e seguro.
    -C "ana@notebook"
    Um comentário para você reconhecer a chave depois.
    $ ssh-keygen -t ed25519 -C "ana@notebook"
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/ana/.ssh/id_ed25519):          « Enter: aceita o local padrão
    Enter passphrase for "/home/ana/.ssh/id_ed25519" (empty for no passphrase):   « uma senha para a própria chave
    Enter same passphrase again:
    Your identification has been saved in /home/ana/.ssh/id_ed25519
    Your public key has been saved in /home/ana/.ssh/id_ed25519.pub
    The key fingerprint is:
    SHA256:340Q2bS3q4f7lphkel3CsHIQWTSxonOlsBO63qO9i+U ana@notebook
    The key's randomart image is:
    …

    A passphrase protege a chave privada caso alguém copie o arquivo. É opcional, mas recomendada. Com ela, o Ubuntu Desktop guarda a senha no chaveiro e só pergunta uma vez por sessão.

  2. Confira os arquivos criados.

    $ ls -l ~/.ssh
    total 12
    -rw------- 1 ana ana 411 Oct 15 10:20 id_ed25519          « privada: só a ana lê (600)
    -rw-r--r-- 1 ana ana  94 Oct 15 10:20 id_ed25519.pub      « pública: pode ser lida
    -rw-r--r-- 1 ana ana 142 Oct 15 10:05 known_hosts         « servidores conhecidos
    $ cat ~/.ssh/id_ed25519.pub
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICj2vrEjdlmZi0bfdTh/Kentfu4XhboCrcKe4h+fmwSu ana@notebook
  3. Copie a chave pública para o servidor com o ssh-copy-id. Ele pede a senha uma última vez e coloca a chave no arquivo ~/.ssh/authorized_keys do servidor:

    $ ssh-copy-id ana@192.168.0.50
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ana/.ssh/id_ed25519.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    ana@192.168.0.50's password:
    
    Number of key(s) added: 1                                 « deu certo
    
    Now try logging into the machine, with: "ssh 'ana@192.168.0.50'"
    and check to make sure that only the key(s) you wanted were added.
  4. Teste. Agora o servidor não pede mais a senha do usuário (só a passphrase da chave, se você criou uma):

    $ ssh ana@192.168.0.50
    Welcome to Ubuntu 26.04.1 LTS (GNU/Linux 7.0.0-38-generic x86_64)
    …

Outra forma de copiar a chave

Se o ssh-copy-id não estiver disponível (por exemplo, vindo do Windows), dá para fazer o mesmo com um pipe: o conteúdo da chave vai pela conexão e é acrescentado ao authorized_keys:

$ cat ~/.ssh/id_ed25519.pub | ssh ana@192.168.0.50 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Uma terceira opção é colar a linha do .pub no arquivo ~/.ssh/authorized_keys do servidor com o nano. O >> (e não >) é importante: ele acrescenta, sem apagar as chaves que já estavam lá.

Permissões importam

O servidor SSH recusa as chaves se as pastas estiverem abertas demais. No servidor, ~/.ssh deve ser 700 e authorized_keys deve ser 600. No cliente, a chave privada deve ser 600. Veja chmod.


Apelidos: ~/.ssh/config

Em vez de lembrar usuário, IP e porta, crie apelidos no arquivo ~/.ssh/config do notebook:

Host servidor
    HostName 192.168.0.50
    User ana

Host vps
    HostName 203.0.113.10
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_vps
ChaveSignificado
HostO apelido que você vai digitar.
HostNameO IP ou nome real.
UserO usuário no servidor.
PortA porta, se não for a 22.
IdentityFileQual chave usar, se você tiver mais de uma.
$ ssh servidor                  « o mesmo que ssh ana@192.168.0.50
$ ssh vps                       « o mesmo que ssh -p 2222 -i ~/.ssh/id_ed25519_vps deploy@203.0.113.10

Os apelidos valem também para scp e rsync (veja scp e rsync).


Formas diferentes de usar o ssh

Rodar um comando só, sem abrir sessão

Coloque o comando depois do endereço. O ssh conecta, roda, mostra o resultado e fecha:

$ ssh servidor uptime
 10:35:12 up 3 days,  4:21,  1 user,  load average: 0,08, 0,05, 0,01
$ ssh servidor "df -h /"
Sist. Arq.      Tam. Usado Disp. Uso% Montado em
/dev/sda2        98G   21G   72G  23% /

Use aspas quando o comando tiver espaços, pipes ou opções, para que eles sejam interpretados no servidor.

Opções do dia a dia

OpçãoFazExemplo
-p PORTAUsa outra portassh -p 2222 ana@servidor
-i CHAVEUsa uma chave específicassh -i ~/.ssh/id_vps deploy@vps
-vMostra cada etapa da conexão; ótimo para depurar (-vvv mostra ainda mais)ssh -v servidor
-tForça um terminal, para comandos interativosssh -t servidor htop
-LTúnel: traz uma porta do servidor para o seu computadorssh -L 8080:localhost:80 servidor
-JPassa por uma máquina intermediária (jump)ssh -J portaria ana@interno

Túnel: acessar uma porta do servidor como se fosse local

Imagine um painel web que roda no servidor na porta 80, mas que só aceita conexões do próprio servidor. Com -L, você cria um túnel:

ssh
O cliente.
-L
Cria um túnel local.
8080
A porta que vai abrir no seu notebook.
:localhost:80
Para onde levar, visto a partir do servidor: a porta 80 dele mesmo.
servidor
Por qual máquina o túnel passa.

Enquanto a sessão estiver aberta, abrir http://localhost:8080 no navegador do notebook mostra o painel do servidor, tudo criptografado.

ssh-agent: digitar a passphrase uma vez só

No Ubuntu Desktop, o chaveiro do GNOME já faz isso sozinho. Num servidor ou num TTY, o ssh-agent guarda a chave destravada na memória:

$ eval "$(ssh-agent -s)"
Agent pid 4821
$ ssh-add
Enter passphrase for /home/ana/.ssh/id_ed25519:
Identity added: /home/ana/.ssh/id_ed25519 (ana@notebook)

Quando não funciona

Connection refused
$ ssh ana@192.168.0.50
ssh: connect to host 192.168.0.50 port 22: Connection refused

O que aconteceu: a máquina existe e respondeu, mas ninguém está escutando na porta 22: o servidor SSH não está instalado, está parado ou usa outra porta.

Como confirmar: no servidor, rode systemctl status ssh e sudo ss -tlpn | grep ssh.

Como resolver: instale (sudo apt install openssh-server) ou informe a porta certa com -p.

Connection timed out
$ ssh ana@192.168.0.50
ssh: connect to host 192.168.0.50 port 22: Connection timed out

O que aconteceu: nenhuma resposta chegou. A máquina está desligada, o IP está errado, ou um firewall está descartando os pacotes em silêncio.

Como confirmar: ping -c 3 192.168.0.50 e nc -zv 192.168.0.50 22. No servidor, sudo ufw status mostra se a porta 22 está liberada.

Could not resolve hostname
$ ssh ana@servidro
ssh: Could not resolve hostname servidro: Name or service not known

O que aconteceu: o nome não existe no DNS, no /etc/hosts nem no ~/.ssh/config. Aqui foi erro de digitação. O ssh mostra essa mensagem em inglês.

Permission denied (publickey)
$ ssh ana@192.168.0.50
ana@192.168.0.50: Permission denied (publickey).

O que aconteceu: o servidor só aceita chaves (a senha foi desligada), e nenhuma das suas chaves está no authorized_keys dele. Também acontece com o usuário errado: root em vez de ana, por exemplo.

Como confirmar: rode ssh -v ana@192.168.0.50 e procure as linhas Offering public key, que mostram quais chaves foram tentadas. No servidor, confira as permissões: ls -ld ~/.ssh (700) e ls -l ~/.ssh/authorized_keys (600).

Como resolver: use a chave certa (-i), confira o usuário, ou peça a quem tem acesso para colocar a sua chave pública no servidor.

REMOTE HOST IDENTIFICATION HAS CHANGED
$ ssh ana@192.168.0.50
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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.
…
Offending ED25519 key in /home/ana/.ssh/known_hosts:3            « a linha 3 guarda o fingerprint antigo
Host key verification failed.

O que aconteceu: o fingerprint guardado não bate com o atual. Na maioria das vezes é inofensivo: você reinstalou o servidor, ou o IP passou a ser de outra máquina. Mas pode ser alguém se passando pelo servidor.

Como resolver: se você sabe por que mudou, apague o registro antigo e conecte de novo, respondendo yes:

$ ssh-keygen -R 192.168.0.50
# Host 192.168.0.50 found: line 3
/home/ana/.ssh/known_hosts updated.
Original contents retained as /home/ana/.ssh/known_hosts.old

Se você não sabe por que mudou, não conecte e confira com quem administra o servidor.

Ele ainda pede senha depois do ssh-copy-id

O que aconteceu: quase sempre são permissões no servidor (a home, o ~/.ssh ou o authorized_keys com escrita para outros), ou a chave foi copiada para outro usuário.

Como resolver: no servidor, rode chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys e veja o motivo no log: sudo journalctl -u ssh -n 20 (veja Logs (journalctl)).


Referência

ComandoFaz
ssh usuario@hostAbre uma sessão remota
ssh host comandoRoda um comando e volta
ssh-keygen -t ed25519 -C "texto"Gera um par de chaves
ssh-copy-id usuario@hostInstala a chave pública no servidor
ssh-keygen -R hostApaga um servidor do known_hosts
ssh-keygen -lf arquivo.pubMostra o fingerprint de uma chave
ssh-addCarrega a chave no agente
sudo apt install openssh-serverInstala o servidor
systemctl status sshEstado do servidor SSH
ArquivoOndePara quê
~/.ssh/id_ed25519ClienteChave privada (600, nunca compartilhe)
~/.ssh/id_ed25519.pubClienteChave pública
~/.ssh/known_hostsClienteFingerprints dos servidores conhecidos
~/.ssh/configClienteApelidos e opções
~/.ssh/authorized_keysServidorChaves públicas autorizadas a entrar (600)
/etc/ssh/sshd_config.d/*.confServidorConfiguração do servidor (veja Segurança do Servidor)

Exercícios

1. Conectar em outra porta

Complete para conectar como ana no 192.168.0.50, que usa a porta 2222:

ssh ana@192.168.0.50

2. Gerar a chave

Complete para gerar uma chave do tipo ed25519:

ssh-keygen -t

3. Instalar a chave no servidor

Complete com o comando que copia a sua chave pública para o servidor:

ana@192.168.0.50

4. ssh: connect to host … port 22: Connection refused significa que…

5. Qual arquivo você nunca deve enviar a ninguém?


Resumo

  • Cliente ssh já vem instalado; o servidor é o pacote openssh-server.
  • Na primeira conexão, o fingerprint é guardado no known_hosts; se mudar, o SSH bloqueia e avisa.
  • Chaves: ssh-keygen -t ed25519 → ssh-copy-id usuario@host → entrar sem senha.
  • ~/.ssh/config cria apelidos; ssh host comando roda um comando remoto.
  • Refused = nada escutando; timed out = sem resposta ou firewall; Permission denied (publickey) = chave ou usuário errados.