Comandos Essenciais de SSH para Administradores de Sistemas
Aprenda comandos SSH essenciais para login remoto, chaves, arquivos de configuração, transferência de arquivos, tunelamento, agentes e solução de problemas.
Comandos SSH Essenciais para Administradores de Sistemas
O Secure Shell (SSH) é a ferramenta diária de acesso remoto para servidores e dispositivos de rede. Se você gerencia sistemas Linux, usa comandos SSH para fazer login, copiar arquivos, executar comandos avulsos, abrir túneis e depurar falhas de conexão.
Este guia foca nos comandos e opções que você provavelmente mais precisará durante o trabalho real de administração.
Estabelecendo Conexões SSH Básicas
O uso mais fundamental do SSH é estabelecer uma sessão de shell interativa e segura com um servidor remoto. A sintaxe básica é direta, permitindo especificar o usuário e o host de destino.
Conectando a um Servidor Remoto
Para conectar a um servidor remoto usando seu nome de usuário local atual:
ssh hostname_or_IP_address
Se seu nome de usuário no servidor remoto for diferente do seu nome de usuário local, você precisa especificá-lo:
ssh username@hostname_or_IP_address
Exemplo:
ssh [email protected]
ssh [email protected]
Especificando uma Porta Personalizada
Por padrão, o SSH usa a porta 22. No entanto, por razões de segurança ou configurações de rede específicas, os servidores geralmente escutam em uma porta diferente. Você pode especificar uma porta personalizada usando a flag -p:
ssh -p 2222 username@hostname_or_IP_address
Dica: Alterar a porta SSH padrão (porta 22) é uma prática de segurança comum para reduzir tentativas de ataque automatizadas, embora não substitua a autenticação forte.
Autenticação Baseada em Chave SSH
Embora a autenticação por senha seja comum, a autenticação baseada em chave é o método recomendado e mais seguro para SSH. Ela usa um par de chaves criptográficas: uma chave privada (mantida em segredo em sua máquina local) e uma chave pública (colocada no servidor remoto).
Gerando Pares de Chaves SSH
Use ssh-keygen para gerar um novo par de chaves. Para a maioria das configurações modernas do OpenSSH, as chaves Ed25519 são um bom padrão. Use RSA apenas quando precisar de compatibilidade com sistemas mais antigos ou políticas que o exijam.
ssh-keygen -t ed25519 -a 100
Este comando gera um par de chaves Ed25519 e aumenta as rodadas de derivação de chave usadas para proteger a frase secreta da chave privada. A chave privada (id_ed25519) e a chave pública (id_ed25519.pub) são normalmente armazenadas em ~/.ssh/.
Copiando Sua Chave Pública para um Servidor Remoto
Para habilitar a autenticação baseada em chave, sua chave pública deve ser colocada no arquivo ~/.ssh/authorized_keys no servidor remoto. O utilitário ssh-copy-id automatiza esse processo:
ssh-copy-id username@hostname_or_IP_address
Este comando solicitará a senha do usuário remoto uma vez, depois copiará sua chave pública e definirá as permissões corretas. Após isso, você deve conseguir conectar sem senha (embora seja solicitada a frase secreta da sua chave privada, se você a definiu).
Aviso: Nunca compartilhe sua chave privada com ninguém. Ela deve ter permissões de arquivo restritas, como chmod 600 ~/.ssh/id_ed25519.
Gerenciando Conexões e Configurações SSH
Executando um Único Comando Remotamente
O SSH não é apenas para shells interativos. Você pode executar um único comando em um servidor remoto diretamente e retornar sua saída para o terminal local.
ssh username@hostname_or_IP_address 'comando_a_executar'
Exemplo:
ssh [email protected] 'ls -l /var/log/'
ssh [email protected] 'sudo apt update && sudo apt upgrade -y'
Usando o Arquivo de Configuração SSH (~/.ssh/config)
Para conexões frequentes, definir hosts em ~/.ssh/config pode economizar tempo e simplificar comandos. Este arquivo permite definir aliases, especificar usuários, portas, chaves privadas e outras opções de conexão.
Exemplo de entrada ~/.ssh/config:
Host webserver
Hostname 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_web
IdentitiesOnly yes
Host devbox
Hostname dev.mydomain.com
User developer
Port 22
IdentityFile ~/.ssh/id_rsa_dev
Uma vez configurado, você pode conectar simplesmente usando o alias:
ssh webserver
ssh devbox
Melhor Prática: Use o arquivo ~/.ssh/config para conexões repetidas. Ele melhora a legibilidade, reduz erros de digitação e mantém as opções de conexão em um só lugar. Evite habilitar o encaminhamento de agente globalmente; ative-o apenas para hosts que realmente precisam.
Transferência Segura de Arquivos com SSH
O SSH fornece duas ferramentas principais para transferências seguras de arquivos: scp e sftp.
scp (Secure Copy Protocol)
scp é usado para copiar arquivos e diretórios entre hosts locais e remotos. Ele usa os mesmos mecanismos de autenticação e segurança do SSH.
Copiando um Arquivo do Local para o Remoto
scp /caminho/para/arquivo/local username@hostname_or_IP_address:/caminho/para/diretorio/remoto/
Exemplo:
scp my_app.tar.gz admin@webserver:/var/www/html/
Copiando um Arquivo do Remoto para o Local
scp username@hostname_or_IP_address:/caminho/para/arquivo/remoto /caminho/para/diretorio/local/
Exemplo:
scp admin@webserver:/var/log/nginx/access.log ~/logs/
Copiando um Diretório Recursivamente
Use a flag -r para diretórios:
scp -r /caminho/para/dir/local username@hostname_or_IP_address:/caminho/para/dir_pai/remoto/
Preservando Atributos de Arquivo
Para preservar horários de modificação, horários de acesso e modos, use a flag -p:
scp -p arquivo_local usuario@hostremoto:/caminho_remoto/
sftp (SSH File Transfer Protocol)
sftp fornece um programa interativo de transferência de arquivos, semelhante ao FTP, mas protegido por SSH. É ideal para gerenciar vários arquivos ou realizar operações complexas de diretório.
Conectando a um Servidor SFTP
sftp username@hostname_or_IP_address
Uma vez conectado, você receberá um prompt sftp>. Comandos comuns incluem:
ls: Listar conteúdo do diretório remotolls: Listar conteúdo do diretório localcd diretorio_remoto: Mudar diretório remotolcd diretorio_local: Mudar diretório localget arquivo_remoto: Baixar um arquivoput arquivo_local: Enviar um arquivomget arquivos_remotos: Baixar vários arquivos (curingas suportados)mput arquivos_locais: Enviar vários arquivos (curingas suportados)exitoubye: Sair da sessão SFTP
Exemplo de Sessão SFTP:
sftp [email protected]
Connected to 192.168.1.100.
sftp> ls
config.ini data/ logs/ public_html/
sftp> cd public_html
sftp> get index.html
Fetching /public_html/index.html to index.html
sftp> put new_page.html
Uploading new_page.html to /public_html/new_page.html
sftp> bye
Tunelamento SSH e Encaminhamento de Porta
O tunelamento SSH, ou encaminhamento de porta, permite criar conexões seguras entre portas locais e remotas, possibilitando o acesso a serviços que, de outra forma, poderiam ser bloqueados por firewalls ou inacessíveis diretamente.
Encaminhamento de Porta Local (-L)
O encaminhamento local permite acessar um serviço em uma rede remota (ou no próprio servidor remoto) a partir de sua máquina local como se estivesse sendo executado localmente.
ssh -L [porta_local]:[host_remoto]:[porta_remota] usuario@servidor_ssh
Exemplo: Acessar um servidor de banco de dados (porta 3306) em uma rede privada, através de um host de salto servidor_ssh, a partir da porta 9000 da sua máquina local.
ssh -L 9000:db.private.net:3306 [email protected]
Agora, você pode conectar a localhost:9000 em sua máquina local, e a conexão será encaminhada com segurança para db.private.net:3306 via jumphost.com.
Encaminhamento de Porta Remota (-R)
O encaminhamento remoto torna um serviço em sua máquina local (ou rede local) acessível a partir do servidor remoto e, potencialmente, para clientes na rede do servidor remoto.
ssh -R [porta_remota]:[host_local]:[porta_local] usuario@servidor_ssh
Exemplo: Tornar um servidor web local (porta 8000) acessível a partir de servidor_ssh na porta 8080.
ssh -R 8080:localhost:8000 admin@remote_server.com
Agora, qualquer pessoa em remote_server.com pode acessar seu servidor web local conectando-se a localhost:8080 em remote_server.com.
Encaminhamento de Porta Dinâmico (-D)
O encaminhamento de porta dinâmico cria um proxy SOCKS, permitindo rotear todo o seu tráfego (ou tráfego específico do aplicativo) através do túnel SSH. Isso é útil para contornar firewalls ou proteger a navegação.
ssh -D [porta_local] usuario@servidor_ssh
Exemplo: Criar um proxy SOCKS na porta 1080 da sua máquina local através de servidor_ssh.
ssh -D 1080 [email protected]
Configure seu navegador ou aplicativo para usar localhost:1080 como um proxy SOCKS5, e todo o tráfego de rede será tunelado através de jumphost.com.
Uso Avançado e Dicas SSH
Executando Comandos em Segundo Plano
Para comandos não interativos que devem ser executados e desconectados, você pode usar a flag -f (vai para segundo plano antes da execução do comando) e -N (não executa um comando remoto).
ssh -f -N -L 9000:db.private.net:3306 [email protected]
Isso configura um encaminhamento de porta local em segundo plano.
Agente SSH e ssh-add
O ssh-agent é um programa que mantém suas chaves privadas na memória, para que você só precise digitar sua frase secreta uma vez por sessão. ssh-add adiciona chaves ao agente.
# Iniciar o agente (se ainda não estiver em execução)
eval "$(ssh-agent -s)"
# Adicionar sua(s) chave(s) ao agente
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_web # Para uma chave específica
O encaminhamento de agente pode permitir que você se autentique de um host de salto para outro servidor sem copiar sua chave privada para o host de salto. Use-o com moderação: um host de salto comprometido pode ser capaz de usar seu agente encaminhado enquanto sua sessão estiver ativa. Prefira ProxyJump quando você só precisar passar por um bastião.
ssh -J [email protected] [email protected]
Conexões SSH Persistentes (ControlMaster)
Para conexões mais rápidas e sobrecarga reduzida, ControlMaster em seu ~/.ssh/config permite que várias sessões SSH compartilhem uma única conexão de rede.
Host *
ControlMaster auto
ControlPath ~/.ssh/control/%C
ControlPersist 4h
Esta configuração cria um soquete de controle para a primeira conexão (ControlMaster auto) e as conexões subsequentes ao mesmo host reutilizarão este soquete por até 4 horas (ControlPersist 4h).
Solução de Problemas SSH
- Permissão Negada: Verifique as permissões de arquivo para chaves privadas (
chmod 600 ~/.ssh/id_ed25519), chaves públicas (chmod 644 ~/.ssh/id_ed25519.pub) e o diretório.ssh(chmod 700 ~/.ssh). No servidor, certifique-se de que~/.ssh/authorized_keystenhachmod 600e~/.sshtenhachmod 700. - Tempo Limite de Conexão: O servidor pode estar inativo, firewall bloqueando a porta 22 (ou porta personalizada) ou endereço IP incorreto.
- Saída Detalhada: Use as flags
-v,-vvou-vvvcomsshpara informações detalhadas de depuração.ssh -vvv [email protected]
Conclusão
Mantenha seu fluxo de trabalho SSH diário simples: use autenticação baseada em chave, armazene opções repetidas em ~/.ssh/config, copie arquivos com scp ou sftp e alcance serviços privados com -L, -R, -D ou -J quando necessário. Quando uma conexão falhar, ssh -vvv geralmente é a maneira mais rápida de ver se o problema é DNS, roteamento, autenticação ou política do servidor.