Comando SSH: como usar as opções -l, -p e -i e verificar erros de conexão

Ambiente de testeFamília RHELAlmaLinux 9.8OpenSSH 9.9p1Lado receptor Debian 12 · OpenSSH 9.2p1 conta comumconta root
Comandos de redesshLocalização/usr/bin/ssh

O comando SSH é o comando do cliente OpenSSH que se conecta a um servidor Linux remoto por uma conexão criptografada no formato ssh conta@endereço-do-servidor e executa comandos no servidor ao qual se conectou. Executamos o ssh de um servidor AlmaLinux 9 para um servidor Debian 12 e verificamos, em ordem, desde a checagem da chave de host na primeira conexão até as opções -l, -p e -i, a execução de comandos remotos e a saída de depuração do -v. Vimos que a forma como as opções são realmente aplicadas pode ser conferida antes, com ssh -G, sem se conectar.

A saída abaixo é exatamente o resultado obtido nos dois servidores. O endereço do servidor e a conta, o nome de host, o caminho e a impressão digital da chave e os números de versão do OpenSSL e do kernel do servidor que se conecta foram trocados por valores de exemplo. O servidor AlmaLinux que se conecta usa a conta root, e o servidor Debian que recebe a conexão usa uma conta comum.

1️⃣ Uso básico do comando SSH

Para entrar em um servidor remoto, escreva depois de ssh o nome da conta e o endereço do servidor unidos por @. Ao entrar, o prompt passa a ser o do servidor conectado, e digitar exit encerra a conexão e volta ao servidor original.

ssh user@192.0.2.10
Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.

O servidor Debian ao qual nos conectamos também mostrou no login algumas linhas de aviso do servidor (motd) e uma notificação de e-mail; só essas linhas foram removidas da saída acima.

Ao se conectar a um servidor pela primeira vez, o ssh mostra antes do login a impressão digital da chave de host do servidor e pergunta se deve continuar a conexão. Ao digitar yes, a chave de host foi salva em ~/.ssh/known_hosts e depois apareceu o resultado do whoami.

ssh user@192.0.2.10 whoami
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Depois que a chave foi salva no known_hosts, a pergunta não apareceu de novo nas conexões seguintes ao mesmo servidor. Se a impressão digital for diferente do valor informado pelo administrador do servidor, digite no. Ao digitar no, o ssh terminou sem se conectar.

ssh user@192.0.2.10
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.

Ao terminar com no, o arquivo known_hosts não foi criado. Por isso a mesma pergunta aparece de novo na próxima conexão.

2️⃣ Opções do comando SSH

As opções do ssh vêm antes do destino da conexão. Ao executar só ssh, apareceu como modo de uso a lista de opções disponíveis.

ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
           [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
           [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
           [-J destination] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           destination [command [argument ...]]
       ssh [-Q query_option]

Se você passar uma opção que não está no modo de uso, aparece o erro [unknown option] junto com o mesmo modo de uso.

-V mostra a versão instalada do cliente OpenSSH. Abaixo está o resultado do servidor AlmaLinux que se conecta; no servidor Debian 12 que recebe a conexão apareceu OpenSSH_9.2p1.

ssh -V
OpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025

-G não se conecta ao servidor: ele junta as opções informadas com os arquivos de configuração e mostra os valores que serão realmente aplicados. A saída completa tem 87 linhas, então escolhemos com grep só as linhas necessárias.

ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "
user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout none

As sete linhas identityfile são os arquivos de chave padrão que o ssh procura em ordem quando -i não é informado. connecttimeout none significa que nenhum tempo de espera de conexão foi definido.

OpçãoCopiarDescrição
-lContaIndica o nome da conta para a conexão
-pPortaIndica a porta da conexão (padrão 22)
-iArquivo de chaveIndica o arquivo de chave privada
-vMostra o processo de conexão em linhas debug1
-CComprime os dados trocados
-XEncaminhamento X11 (programas GUI remotos)
-TNão aloca um terminal virtual
-tForça a alocação de um terminal virtual
-nRedireciona a entrada padrão para /dev/null
-qReduz avisos e mensagens informativas
-oopção=valorDefine uma opção do arquivo de configuração só para esta conexão
-LEncaminhamento de porta local
-FIndica o arquivo de configuração
-GMostra as configurações aplicadas, sem se conectar
-VMostra a versão do cliente OpenSSH
OpçãoCopiarDescrição
-NMantém só a conexão, sem comando remoto
-JConecta passando por outro servidor

3️⃣ A opção ssh -l e o encaminhamento de porta com -L

-l é a opção que indica o nome da conta para a conexão. ssh -l user 192.0.2.10 se conectou com a mesma conta que ssh user@192.0.2.10.

ssh -l user 192.0.2.10 whoami
user

Ao conferir com -G, a conta passada com -l apareceu no item user.

ssh -G -l admin example.com | grep -E "^(user|hostname|port) "
user admin
hostname example.com
port 22

Também conferimos com -G qual vale quando se escrevem juntos -l e conta@endereço. No OpenSSH 9.9p1, foi aplicada a conta admin, passada com -l.

ssh -G -l admin user@example.com | grep -E "^(user|hostname) "
user admin
hostname example.com

O -L maiúsculo tem nome parecido, mas é uma opção de encaminhamento de porta local que não tem relação com a conta. Ele passa as conexões que chegam a uma porta do seu servidor por dentro da conexão SSH e as liga a um endereço e uma porta do lado do servidor remoto.

8080:localhost:80 significa ligar a porta 8080 do seu servidor à porta 80 do localhost visto a partir do servidor remoto. Ao conferir com -G, o mesmo valor apareceu no item localforward.

ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "
hostname example.com
localforward 8080 [localhost]:80

Quando quiser só manter um túnel aberto, acrescente também -N, que mantém a conexão sem comando remoto.

4️⃣ Como indicar a porta e o arquivo de chave do SSH

Se o servidor SSH aceita conexões em uma porta diferente da 22, indique a porta com -p. -i indica um arquivo de chave privada que não tem o nome padrão.

ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "
user user
hostname example.com
port 2222
identityfile ./mykey

Ao indicar -i, as sete linhas de arquivos de chave padrão sumiram e ficou só o arquivo indicado.

Os arquivos de chave são criados com o ssh-keygen. Se você já usa uma chave, indique um novo nome de arquivo com -f. Abaixo está o resultado da criação de uma chave ed25519 com o novo nome mykey.

ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|       ..=+.+o   |
|     .  =oo+.oo  |
|    . . +=B. . . |
|     . =o=o=. . .|
|    . E S++... . |
|   . .o.+ +.     |
|    o+== .       |
|    +*oo         |
|   ...+.         |
+----[SHA256]-----+

mykey é a chave privada e mykey.pub é a chave pública. O manual do OpenSSH orienta colocar a chave pública em ~/.ssh/authorized_keys no servidor ao qual você vai se conectar. Isso pode ser feito com o ssh-copy-id, como em [ssh-copy-id -i ./mykey.pub user@192.0.2.10].

Se você se conecta com frequência ao mesmo servidor, escreva um apelido em ~/.ssh/config e digite só ssh seguido do apelido. A linha Host é o apelido, e as linhas abaixo dela são os valores aplicados ao se conectar com esse apelido.

Host myserver
    HostName 192.0.2.10
    User user
    Port 2222
    IdentityFile ~/.ssh/mykey

Ao escrever essas configurações em um arquivo ./config e lê-lo com -F, o endereço, a conta, a porta e o arquivo de chave foram todos aplicados com um só apelido.

ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "
user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykey

As opções escritas na linha de comando têm prioridade sobre o arquivo de configuração. Ao acrescentar -p 22 ao mesmo apelido, port mudou para 22.

ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "
hostname 192.0.2.10
port 22

hostname continuou 192.0.2.10, como no arquivo de configuração, e só port mudou para o valor escrito na linha de comando.

5️⃣ Executar comandos remotos com SSH

Se você escrever um comando depois do destino da conexão, o ssh executa só esse comando sem tela de login e encerra a conexão. Se houver vários comandos ou símbolos do shell como o ponto e vírgula, coloque tudo entre aspas simples.

ssh user@192.0.2.10 'whoami; hostname'
user
server2

O código de saída do comando remoto voltou sem mudança como código de saída do ssh. Em scripts, esse valor mostra se o comando remoto deu certo.

ssh user@192.0.2.10 'exit 3'; echo $?
3

Ao executar um comando assim, nenhum terminal virtual é alocado. O tty executado com -T mostrou [not a tty].

ssh -T user@192.0.2.10 tty
not a tty

O manual do ssh descreve -t como a opção usada para executar programas baseados em tela no servidor remoto. Com -t apareceu /dev/pts/0 e, no fim, também uma mensagem de que a conexão foi fechada.

ssh -t user@192.0.2.10 tty
/dev/pts/0
Connection to 192.0.2.10 closed.

Ao acrescentar -q, essa mensagem não apareceu.

ssh -t -q user@192.0.2.10 tty
/dev/pts/0

-n redireciona a entrada padrão do ssh para /dev/null. Sem -n, o cat remoto mostrou sem mudança o hello passado pelo pipe.

echo hello | ssh user@192.0.2.10 cat
hello
echo hello | ssh -n user@192.0.2.10 cat

Ao acrescentar -n ao mesmo comando, o hello não chegou ao cat remoto e nada foi mostrado.

6️⃣ Erros de conexão SSH e depuração com ssh -v

Quando não for possível se conectar, veja primeiro na mensagem de erro em que etapa parou. Quando o endereço do servidor não foi encontrado, apareceu [Could not resolve hostname].

ssh user@nosuchhost.invalid
ssh: Could not resolve hostname nosuchhost.invalid: Name or service not known

Se o endereço está certo, mas nada responde naquela porta, aparece [Connection timed out]. Com -o ConnectTimeout=5, terminou com esse erro depois de 5 segundos.

ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10
ssh: connect to host 192.0.2.10 port 2222: Connection timed out

Ao nos conectarmos com -o BatchMode=yes a um servidor que não estava no known_hosts, o ssh terminou com [Host key verification failed.] sem perguntar pela chave de host. Para que a primeira conexão de um script não pare na pergunta, use StrictHostKeyChecking=accept-new.

ssh -o BatchMode=yes user@192.0.2.10 true
Host key verification failed.

Segundo o manual do ssh_config, accept-new salva sem perguntar só a chave de host de servidores ainda não vistos. Se chegar uma chave diferente da que já está salva, a conexão é recusada.

ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoami
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

Se a conta não tem nenhuma chave registrada, aparece [Permission denied (publickey)]. Falhas de autenticação repetidas podem fazer o servidor bloquear o IP que se conecta.

-v mostra o processo de conexão em linhas debug1. A saída completa passa de 70 linhas, então abaixo estão só as linhas das etapas de conexão e autenticação, escolhidas com grep.

ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'
debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0

A linha Connecting to é a tentativa de conexão, e as linhas Server host key e is known and matches são a checagem da chave de host. Na linha Offering public key a chave foi oferecida, e na linha Authenticated to a autenticação por chave terminou. Se parar na autenticação, confira primeiro se o arquivo de chave desejado aparece na linha Offering public key.

Ao acrescentar -C, o valor compression da linha kex mudou de none para zlib@openssh.com.

ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'
debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.

-X é a opção que traz para o seu computador a tela dos programas GUI do servidor remoto. Ao executá-la em um servidor AlmaLinux sem tela, apareceu uma linha debug1 dizendo que não há DISPLAY.

ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAY
debug1: X11 forwarding requested but DISPLAY not set

DISPLAY é a variável de ambiente que define onde as telas GUI são mostradas. Por isso -X é usado ao se conectar a partir de um computador com área de trabalho.

🔲 Simulador do comando SSH

No simulador abaixo, você pode se conectar a um servidor virtual com ssh e testar opções, comandos remotos e ssh -G digitando você mesmo.

Simulador do comando SSHAlmaLinux 9.8 → Debian 12
[root@server work]#
Funciona só dentro do navegador e não se conecta a nenhum servidor real. Use ↑↓ para chamar de novo os comandos digitados antes.

🔢 FAQ & conteúdo recomendado

Com -o ServerAliveInterval=60, um sinal é enviado ao servidor a cada 60 segundos para manter a conexão. Ao conferir com -G, serveraliveinterval mudou do padrão 0 para 60. Para não digitar isso toda vez, coloque o mesmo item abaixo de Host em ~/.ssh/config.

O modo de uso do ssh não tem nenhuma opção que receba senha. Na autenticação por senha, ela é digitada quando pedida durante a conexão; em tarefas que precisam se conectar automaticamente, a autenticação é feita com uma chave criada pelo ssh-keygen.

Escreva em -J o servidor por onde passar. Ao conferir [ssh -J admin@bastion.example.com user@192.0.2.10] com -G, esse servidor apareceu no item proxyjump.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 0   +   10   =