Dominando o SSH: Seu Guia Essencial de Linha de Comando

Aprenda comandos práticos de SSH para login, chaves, transferência de arquivos, encaminhamento de porta e configuração reutilizável de host.

Dominando o SSH: Seu Guia Essencial de Linha de Comando

O protocolo Secure Shell (SSH) oferece uma maneira criptografada de fazer login em sistemas remotos, executar comandos e transferir arquivos. Se você gerencia servidores, alguns hábitos de linha de comando SSH tornam seu trabalho mais rápido e seguro.

Este guia aborda os comandos que você mais usará: login remoto, autenticação por chave, scp, sftp, encaminhamento de porta local e aliases ~/.ssh/config.

Estabelecendo Login Remoto Seguro

O uso mais frequente do SSH é garantir uma conexão de terminal a um servidor remoto. A sintaxe básica é direta, mas existem opções cruciais para maior segurança e usabilidade.

Sintaxe Básica de Conexão

O comando padrão requer especificar o usuário remoto e o endereço do host (IP ou nome de domínio):

ssh [usuário]@[host]
# Exemplo:
ssh [email protected]

Especificando uma Porta Não Padrão

Por razões de segurança, muitos administradores alteram a porta SSH padrão (Porta 22). Use a flag -p para especificar um número de porta diferente:

ssh -p 2222 [email protected]

Executando Comandos Remotos Únicos

O SSH não se limita a abrir um shell interativo. Você pode executar um único comando no servidor remoto e ter a saída retornada localmente, o que é extremamente útil para scripts e verificações rápidas.

# Executa 'ls -l' no diretório /var/log do servidor remoto
ssh usuario@host 'ls -l /var/log'

# Verifica o tempo de atividade do servidor
ssh usuario@host uptime

Gerenciando Autenticação com Chaves SSH

A autenticação por senha é frequentemente exposta a ataques de força bruta. As chaves SSH usam uma chave privada em sua máquina e uma chave pública no servidor remoto, para que o servidor possa verificar você sem receber sua senha.

Gerando Pares de Chaves

Se você ainda não tem um par de chaves, pode gerar um usando ssh-keygen. É uma boa prática usar uma frase secreta forte para proteger sua chave privada.

ssh-keygen -t ed25519 -C "[email protected]"

As chaves RSA ainda são comuns, especialmente para sistemas mais antigos. Para uma nova chave em uma configuração OpenSSH moderna, Ed25519 é geralmente a escolha padrão mais simples.

Copiando a Chave Pública para o Servidor

O utilitário ssh-copy-id é a maneira mais simples de instalar sua chave pública local no arquivo ~/.ssh/authorized_keys do usuário remoto. Normalmente, você digita sua senha uma vez, e os logins futuros podem usar a chave.

# Copia sua chave pública padrão para o servidor e define permissões comuns
ssh-copy-id usuario@host

Dica: Usando a Chave Privada Se sua chave privada não estiver no local padrão (~/.ssh/id_rsa), você deve usar a flag -i para especificar seu caminho ao conectar:

ssh -i ~/.ssh/minha_chave_personalizada usuario@host

Transferências Seguras de Arquivos

O SSH fornece duas ferramentas principais para transferência segura de arquivos: scp (Cópia Segura) e sftp (Protocolo de Transferência Segura de Arquivos).

A. Usando Cópia Segura (scp)

scp é ideal para transferências de arquivos simples, rápidas e únicas, oferecendo uma interface de linha de comando modelada após o comando Unix padrão cp (copiar).

Transferindo Arquivos do Local para o Remoto

# Sintaxe: scp [arquivo_local] [usuário]@[host]:/[caminho_remoto]
scp pacote_implantacao.tar.gz usuario@servidorweb:/var/www/uploads/

Transferindo Arquivos do Remoto para o Local

# Sintaxe: scp [usuário]@[host]:/[arquivo_remoto] [caminho_local]
scp usuario@servidorbd:/var/log/backup.sql .

Copiando Diretórios Recursivamente

Use a flag -r para copiar estruturas de diretórios inteiras.

scp -r ~/arquivos_projeto/ usuario@servidorconstrucao:/home/usuario/construcoes/

B. Usando Protocolo de Transferência Segura de Arquivos (sftp)

sftp estabelece uma sessão interativa, semelhante a um cliente FTP tradicional, mas protegida via SSH. É mais adequado para navegar em diretórios remotos, listar arquivos e realizar múltiplas transferências em uma única sessão.

Iniciando uma Sessão sftp

sftp usuario@host

Comandos Comuns da Sessão sftp

Comando Descrição
ls Listar arquivos remotos
lls Listar arquivos locais
get nome_arquivo Baixar um arquivo do servidor remoto
put nome_arquivo Enviar um arquivo para o servidor remoto
cd /caminho/ Alterar diretório remoto
lcd /caminho/ Alterar diretório local
quit Sair da sessão sftp

Tunelamento SSH com Encaminhamento de Porta Local

O tunelamento SSH, ou encaminhamento de porta, permite criptografar conexões para protocolos não seguros ou acessar serviços em uma rede interna através de um host de salto. A forma mais comum é o Encaminhamento de Porta Local.

Encaminhamento de Porta Local (-L)

O encaminhamento local roteia o tráfego de uma porta em sua máquina local para uma porta especificada em um host remoto através do servidor SSH. Isso é útil para acessar bancos de dados internos, interfaces web ou serviços proprietários que não estão diretamente expostos à internet pública.

Cenário: Você quer acessar um servidor web interno privado (acessível apenas a partir de servidorsalto) na porta 80.

# Sintaxe: ssh -L [porta_local]:[host_destino]:[porta_destino] [usuário]@[servidorsalto]
ssh -L 8080:web-interno.lan:80 usuario@servidorsalto -N
  • -L 8080:web-interno.lan:80: O tráfego que chega à sua máquina local na porta 8080 é encaminhado para web-interno.lan na porta 80, via servidorsalto.
  • -N: Diz ao SSH para não executar um comando remoto; ele apenas configura o túnel.

Uma vez estabelecida a conexão, você pode acessar o site interno navegando em seu navegador local para http://localhost:8080.

Melhorando a Eficiência com o Arquivo de Configuração SSH

Digitar manualmente comandos SSH complexos, incluindo portas personalizadas, nomes de usuário e caminhos de chave, é ineficiente. O arquivo de configuração SSH (~/.ssh/config) permite definir aliases e configurações para servidores acessados com frequência.

Exemplo de Configuração (~/.ssh/config)

Crie ou edite o arquivo ~/.ssh/config com a seguinte estrutura:

# Servidor 1: Chave padrão, porta não padrão
Host dev-web
    HostName 10.0.0.50
    User usuario_implantacao
    Port 2222
    IdentityFile ~/.ssh/id_rsa_dev

# Servidor 2: Acesso via servidor de salto exigindo autenticação por chave
Host producao-bd
    HostName 10.0.20.15
    User admin_sistema
    IdentityFile ~/.ssh/chave_producao
    LocalForward 54320 127.0.0.1:5432

Nesse segundo exemplo, ssh producao-bd abre uma porta local em sua estação de trabalho. Você pode então apontar um cliente PostgreSQL para localhost:54320, e o SSH transporta o tráfego para 127.0.0.1:5432 visto do host remoto.

Conectando com Aliases

Uma vez configurado, conectar-se torna-se dramaticamente mais simples:

# Conecta a 10.0.0.50 na porta 2222 como usuario_implantacao
ssh dev-web

# Conecta e configura automaticamente o encaminhamento de porta (se configurado)
ssh producao-bd

Principais Conclusões

Comece com ssh usuario@host, adicione autenticação baseada em chave e mova opções repetidas para ~/.ssh/config. Depois que esses fundamentos estiverem sólidos, o encaminhamento local com ssh -L oferece uma maneira controlada de alcançar serviços privados sem expô-los diretamente à rede.