Guia Prático Completo de SSH no Ubuntu

Visão Geral

Este guia aborda os conceitos básicos e as principais aplicações do SSH (Secure Shell), uma ferramenta essencial para administração de servidores Linux e operações remotas. Desde a instalação do pacote cliente e o acesso remoto básico, passando pela criação segura de pares de chaves SSH com autenticação sem senha, até perfis práticos no SSH config e técnicas de redirecionamento de portas (port forwarding), tudo é explicado de forma simples com comandos práticos no terminal passo a passo.

1. Verificação do Cliente SSH e Acesso Remoto Básico

Para iniciar as práticas de acesso remoto via SSH, instalamos o pacote openssh-client e o atualizamos para a versão mais recente.

apt-get update -qq && apt-get install -y openssh-client

O comando ssh -V verifica as informações de versão do cliente OpenSSH instalado no sistema.
⚙️ [Principais Opções]

-p : Especifica um número de porta diferente da porta padrão 22 utilizada pelo servidor remoto.
-i : Define o caminho do arquivo de chave privada (Private Key) a ser utilizado na autenticação em vez de senha.
-v : Exibe mensagens de depuração para analisar detalhadamente o processo de conexão e identificar causas de eventuais falhas.
-C : Habilita a compressão na transferência de dados para economizar largura de banda de rede.
-o : Permite definir diretamente na linha de comando opções normalmente configuradas no arquivo ~/.ssh/config (ex.: ConnectTimeout).
-L : Configura o redirecionamento de porta local (local port forwarding) para encaminhar tráfego a um serviço de rede remoto.
-R : Configura o redirecionamento de porta remota (remote port forwarding), permitindo o acesso do servidor remoto a serviços locais.

ssh -V

O comando ssh -p 22 -o ConnectTimeout=5 [email protected] tenta estabelecer conexão com o host remoto especificado utilizando a porta 22 e um tempo limite de conexão (timeout) de 5 segundos.
Isso previne esperas indefinidas em caso de latência na rede e possibilita verificar rapidamente o status da conexão.

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. Geração de Par de Chaves SSH (Key Pair) e Configuração Segura de Permissões

Preparamos o diretório para armazenar com segurança os arquivos de chave SSH e restringimos o acesso apenas ao proprietário com o comando mkdir -p ~/.ssh && chmod 700 ~/.ssh.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

O comando ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' gera um novo par de chaves SSH sem passphrase, utilizando o algoritmo Ed25519, o padrão criptográfico moderno mais recomendado.
Como resultado da execução, confirma-se a criação correta da chave privada (id_ed25519), da chave pública (id_ed25519.pub) e do fingerprint exclusivo da chave.

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

Para atender aos rigorosos requisitos de segurança do daemon SSH, configuramos as permissões de arquivo com chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub, garantindo que a chave privada possa ser lida e gravada apenas pelo proprietário, enquanto a chave pública possa ser lida por qualquer usuário.

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

O comando ls -la ~/.ssh verifica em detalhes a lista de arquivos criados no diretório e o estado das permissões de segurança aplicadas.
Através da saída, confirma-se que as permissões desejadas foram aplicadas corretamente: drwx------ (700) para o diretório .ssh, -rw------- (600) para a chave privada e -rw-r--r-- (644) para a chave pública.

ls -la ~/.ssh

3. Registro da Chave Pública para Login Sem Senha (ssh-copy-id)

Criamos o arquivo responsável por armazenar as chaves públicas autorizadas para acesso remoto e definimos suas permissões com touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys, permitindo leitura e gravação exclusivamente pelo proprietário.

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

Executamos o comando cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys para acrescentar o conteúdo da chave pública recém-gerada à lista de chaves autorizadas.

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

O comando ssh-keygen -l -f ~/.ssh/authorized_keys consulta as informações de fingerprint do arquivo de chaves autorizadas para validar se a chave pública foi registrada com sucesso.
A saída confirma que a chave pública Ed25519 de 256 bits e o comentário inserido na criação (lab-demo@ubuntu) constam corretamente registrados.

ssh-keygen -l -f ~/.ssh/authorized_keys

4. Simplificação de Conexões Complexas com o Arquivo SSH Config

Em vez de digitar longos parâmetros de conexão a cada acesso, definimos o endereço IP, nome de usuário, porta e caminho da chave privada do host remoto em ~/.ssh/config associando-os a um alias amigável.

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

Para evitar que o cliente SSH rejeite arquivos de configuração com permissões inseguras, ajustamos o acesso com chmod 600 ~/.ssh/config, permitindo que apenas o proprietário faça leitura e gravação.

chmod 600 ~/.ssh/config

O comando cat ~/.ssh/config exibe o conteúdo do arquivo de configuração do cliente SSH para verificar o estado das definições.
Pela saída exibida, valida-se que o nome do host, a conta de usuário, a porta e a chave privada para o alias dev-server foram salvos exatamente como planejado.

cat ~/.ssh/config

5. Execução de Comandos Únicos via SSH e Tunelamento para Maior Produtividade Remota

O comando ssh -V verifica as informações de versão do cliente OpenSSH instalado no sistema atual.

ssh -V

O comando ssh -o BatchMode=yes -o ConnectTimeout=2 [email protected] 'uname -a; df -h' || true executa diretamente comandos para consultar informações do sistema e uso de disco no host remoto sem abrir uma sessão de shell interativa, retornando os resultados na tela.
Configurado para execução direta sem esperar digitação de senha, permite rodar comandos avulsos com total segurança em rotinas de automação e scripts batch.

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

O comando ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 [email protected] || true realiza o redirecionamento de porta local (local port forwarding), estabelecendo um túnel criptografado seguro em segundo plano sem executar comandos remotos, vinculando a porta 8080 da máquina local à porta 80 do servidor remoto.
Com isso, torna-se possível acessar de forma segura, a partir de uma porta local, serviços web internos ou bancos de dados remotos que não estão diretamente expostos à rede externa.

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

Examinamos passo a passo, no ambiente Ubuntu, desde o acesso remoto básico com SSH até o login sem senha baseado em chaves criptográficas e as técnicas práticas de redirecionamento de portas.
Com base nos conhecimentos práticos adquiridos sobre SSH, construa a partir de agora um ambiente de gerenciamento de servidores remotos muito mais seguro, prático e eficiente.