Conexão
Conexão Básica
ssh user@host # conectar ao host ssh -p 2222 user@host # porta personalizada ssh user@host comando # executar comando remoto ssh -t user@host "top" # forçar alocação de TTY
Opções de Conexão
-p portaConectar a uma porta específica
-i chaveUsar identidade específica (chave privada)
-tForçar alocação de pseudo-terminal
-v / -vv / -vvvDepuração detalhada (nível crescente)
-qModo silencioso (suprime avisos)
-NSem comando remoto (para túneis)
-fIr para segundo plano antes do comando
-J saltoHost intermediário (ProxyJump)
Gerenciamento de Chaves
Gerar Chaves
ssh-keygen -t ed25519 -C "[email protected]" ssh-keygen -t rsa -b 4096 -C "[email protected]" ssh-keygen -t ed25519 -f ~/.ssh/minhachave ssh-keygen -p -f ~/.ssh/id_ed25519 # alterar senha
Implantar Chave Pública
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/minhachave.pub user@host # Manual: acrescente .pub ao authorized_keys remoto cat ~/.ssh/id_ed25519.pub | ssh user@host \ "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Arquivos de Chave
~/.ssh/id_ed25519Chave privada (mantenha em segredo)
~/.ssh/id_ed25519.pubChave pública (pode compartilhar)
~/.ssh/authorized_keysRemoto: chaves públicas aceitas
~/.ssh/known_hostsImpressões digitais de hosts conhecidos
Arquivo de Configuração
Básico do ~/.ssh/config
Host meuservidor HostName 192.168.1.100 User deploy Port 2222 IdentityFile ~/.ssh/chave_deploy # Então conecte apenas com: # ssh meuservidor
Opções Úteis de Configuração
Host * ServerAliveInterval 60 ServerAliveCountMax 3 AddKeysToAgent yes IdentitiesOnly yes Host bastion HostName bastion.example.com User admin
Diretivas de Configuração
HostPadrão de alias para a entrada
HostNameNome de host real ou IP
UserNome de usuário para login
PortPorta remota (padrão 22)
IdentityFileCaminho para a chave privada
ProxyJumpPassar por outro host
ServerAliveIntervalIntervalo de keep-alive (segundos)
IdentitiesOnlyUsar apenas as chaves especificadas
Encaminhamento de Porta
Encaminhamento Local (-L)
# Acessar porta 5432 remota via porta local 5432 ssh -L 5432:localhost:5432 user@host # Acessar remote-db:3306 através do host ssh ssh -L 3306:remote-db:3306 user@host # Vincular a todas as interfaces ssh -L 0.0.0.0:8080:localhost:80 user@host
Encaminhamento Remoto (-R)
# Expor porta local 3000 na porta remota 8080 ssh -R 8080:localhost:3000 user@host # Permitir conexões remotas de qualquer interface ssh -R 0.0.0.0:8080:localhost:3000 user@host
Encaminhamento Dinâmico (-D)
# Proxy SOCKS5 na porta local 1080 ssh -D 1080 user@host # Proxy SOCKS em segundo plano ssh -D 1080 -fN user@host
SCP e SFTP
SCP (Cópia Segura)
scp file.txt user@host:/caminho/remoto/ scp user@host:/caminho/remoto/file.txt ./local/ scp -r dir/ user@host:/caminho/remoto/ scp -P 2222 file.txt user@host:/caminho/
SFTP (Transferência Interativa)
sftp user@host # Dentro da sessão sftp: # put local.txt — enviar arquivo # get remote.txt — receber arquivo # ls / lcd / cd — listar / mudar diretório
Opções de Transferência
-rRecursivo (copiar diretórios)
-P portaEspecificar porta (SCP usa -P, não -p)
-CHabilitar compressão
-l limiteLimite de largura de banda em Kbit/s
-i chaveUsar arquivo de identidade específico
Encaminhamento de Agente
Agente SSH
eval "$(ssh-agent -s)" # iniciar agente ssh-add ~/.ssh/id_ed25519 # adicionar chave ao agente ssh-add -l # listar chaves carregadas ssh-add -D # remover todas as chaves
Encaminhando o Agente
ssh -A user@host # encaminhar agente # Ou em ~/.ssh/config: # Host meuservidor # ForwardAgent yes
Notas sobre o Agente
O encaminhamento de agente permite ao host remoto usar suas chaves locais sem copiá-las. Use apenas com hosts confiáveis. Prefira ProxyJump ao encaminhamento de agente quando possível.
Túneis
Túnel Persistente
# Túnel em segundo plano que permanece aberto ssh -fNT -L 5432:localhost:5432 user@host # Túnel com reconexão automática (com autossh) autossh -M 0 -fNT -L 5432:localhost:5432 user@host
Hosts Intermediários / Bastion
ssh -J bastion user@internal-host ssh -J user1@hop1,user2@hop2 user@target # Equivalente em config: # Host internal # HostName 10.0.0.5 # ProxyJump bastion
Gerenciamento de Túnel
-fSegundo plano após autenticação
-NSem comando remoto
-TDesabilitar pseudo-terminal
~.Matar sessão SSH travada (escape)
~CAbrir linha de comando para encaminhamento
~#Listar conexões encaminhadas
Solução de Problemas
Depurando a Conexão
ssh -vvv user@host # verbosidade máxima ssh -G user@host # exibir config (simulação) ssh-keyscan host # buscar chaves do host ssh-keygen -R host # remover de known_hosts
Problemas Comuns
Permissão negadaChave, usuário ou permissões de ~/.ssh incorretos (700/600)
Chave do host alteradassh-keygen -R host, então reconectar
Tempo de conexão esgotadoVerificar firewall, porta e acessibilidade do host
Muitas falhas de autenticaçãoUse -i para especificar a chave ou IdentitiesOnly
Pipe quebradoAdicionar ServerAliveInterval à configuração
Permissões de Arquivo
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 # chave privada chmod 644 ~/.ssh/id_ed25519.pub # chave pública chmod 600 ~/.ssh/authorized_keys chmod 644 ~/.ssh/known_hosts
Melhores Práticas de Segurança
Endurecimento do Servidor
PasswordAuthentication noDesabilitar login por senha
PermitRootLogin noDesabilitar acesso SSH como root
AllowUsers deployLista de usuários permitidos
Port 2222Porta não padrão (evitar scanners)
MaxAuthTries 3Limitar tentativas de autenticação
Práticas com Chaves
Prefira chaves Ed25519 (menores, mais rápidas, mais seguras). Sempre defina uma senha nas chaves privadas. Use ssh-agent para evitar redigitar senhas. Rotacione chaves periodicamente; revogue chaves não utilizadas. Use IdentitiesOnly para controlar qual chave é oferecida.
Multiplexação
Compartilhamento de Conexão
# Em ~/.ssh/config Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600 # Criar diretório de socket mkdir -p ~/.ssh/sockets
Benefícios da Multiplexação
Reutiliza uma única conexão TCP para múltiplas sessões SSH ao mesmo host. Elimina handshakes repetidos — conexões mais rápidas e menor sobrecarga. ControlPersist mantém o master ativo (segundos).
Sequências de Escape
Comandos de Escape SSH
~.Encerrar conexão (matar sessão travada)
~^ZSuspender sessão SSH
~CAbrir linha de comando (adicionar encaminhamento)
~#Listar conexões encaminhadas
~&Colocar SSH em segundo plano (aguardando conexões)
~?Exibir ajuda de escape
~~Enviar til literal