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 remoto
  • lls: Listar conteúdo do diretório local
  • cd diretorio_remoto: Mudar diretório remoto
  • lcd diretorio_local: Mudar diretório local
  • get arquivo_remoto: Baixar um arquivo
  • put arquivo_local: Enviar um arquivo
  • mget arquivos_remotos: Baixar vários arquivos (curingas suportados)
  • mput arquivos_locais: Enviar vários arquivos (curingas suportados)
  • exit ou bye: 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_keys tenha chmod 600 e ~/.ssh tenha chmod 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, -vv ou -vvv com ssh para 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.