Ir diretamente para o conteúdo

Definições de cookies

Escolha que tipos de cookies permite. Pode alterar a sua escolha a qualquer momento em Definições de cookies, no fundo de cada página. Política de privacidade

Necessários

Sempre ativos

Necessários para iniciar sessão, manter o seu carrinho e memorizar as suas escolhas. Estão sempre ativos.

Que cookies?
  • weboke_sessie, weboke_klant, weboke_remember: a sua sessão e manter a sessão iniciada
  • weboke_basket: o seu carrinho
  • wkBtwIncl: mostrar preços com ou sem IVA
  • wok_cookies: a sua escolha de cookies, 12 meses

Mede que anúncio leva a uma visita ou encomenda, para não pagarmos por anúncios que não dão resultado.

Que cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), até 90 dias
  • OpenAI Ads, anúncios no ChatGPT
  • wok_aff: através de que parceiro chegou até nós (programa de afiliados), 60 dias

4,6

País e idioma

Cada país tem o seu próprio site, com os preços e o IVA desse país.

Ver

Utilizar o SSH de forma inteligente

Módulo 2: SSH e chaves · Tempo de leitura: 10 minutos

Objetivo de aprendizagem: Após esta lição, saberá utilizar o SSH no dia a dia de forma prática com um ficheiro de configuração próprio, copiar ficheiros com scp e rsync e aceder a uma base de dados através de um túnel, sem que a porta da base de dados tenha de estar aberta para a Internet.

Conceitos-chave: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding (reencaminhamento de portas), -L, túnel, ProxyJump, ServerAliveInterval, outro número de porta, revogar uma chave

Escrever menos com ~/.ssh/config

Ao fim de algumas semanas, estará a escrever isto dezenas de vezes por dia:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

Com um ficheiro de configuração para o cliente, o comando fica mais curto e comete menos erros. O ficheiro encontra-se no seu próprio computador: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, sem extensão).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Agora basta:

anna@laptop:~$ ssh web1
anna@web1:~$

O que fazem estas linhas?

  • Host é a alcunha que o próprio escolhe. É o que escreve a seguir a ssh, scp e rsync.
  • HostName é o endereço real: um endereço IP ou um nome que consta do DNS.
  • User e Port são o nome de utilizador e a porta, para que já não tenha de os memorizar.
  • IdentityFile indica a chave. É útil se tiver várias chaves; sem esta linha, o ssh experimenta as suas chaves predefinidas.
  • ServerAliveInterval 60 envia a cada 60 segundos um pequeno sinal de vida. Muitos routers domésticos e redes wifi cortam uma ligação inativa ao fim de poucos minutos; assim, a sua sessão mantém-se aberta.

Também aqui conta o primeiro valor, tal como no servidor. Coloque, por isso, regras gerais como Host * no fim do ficheiro.

Copiar ficheiros: scp, rsync e sftp

O scp copia um ficheiro, com a mesma forma que cp, mas com host: antes:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

O rsync é mais inteligente com pastas e grandes quantidades de dados: envia apenas o que foi alterado e consegue retomar uma cópia interrompida. Tem de estar instalado em ambos os lados (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Atenção à barra a seguir a ./site/: com barra, o rsync copia o conteúdo da pasta; sem barra, copia a própria pasta (obtém então /var/www/example.com/site/). Em caso de dúvida, experimente primeiro com --dry-run e tenha muito cuidado com --delete, que apaga no lado de destino tudo o que não existe no seu lado.

O sftp e programas gráficos como o FileZilla ou o WinSCP utilizam a mesma ligação SSH e a mesma chave. Não é, portanto, necessário um servidor FTP à parte. Um servidor FTP tradicional num VPS é desaconselhado: o FTP simples envia a sua palavra-passe pela rede sem encriptação.

Um túnel em vez de uma porta aberta

Esta é talvez a coisa mais útil que o SSH consegue fazer. Imagine que no seu servidor corre uma base de dados PostgreSQL e que pretende aceder-lhe a partir do seu portátil com um programa gráfico. A tentação de abrir a porta 5432 para a Internet é grande. Não o faça: portas de bases de dados abertas são uma das maiores causas de fugas de dados (lição 10.2), e o curso verifica mais tarde, a partir do exterior, que estão fechadas (exercício Z5.1).

Com o reencaminhamento de porta local (local port forwarding), o SSH cria um túnel:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Leia isto como: "escutar no meu portátil na porta 5432 e enviar tudo o que lá chegar, através da ligação SSH, para 127.0.0.1:5432, visto a partir do servidor". Enquanto esta sessão estiver aberta, liga o seu programa de base de dados a localhost porta 5432 no seu próprio portátil e chega à base de dados no servidor.

O que torna isto tão bom?

  • A base de dados escuta apenas em 127.0.0.1 no servidor e é inacessível a partir do exterior.
  • A ligação é encriptada pelo SSH, mesmo que a própria base de dados não tenha encriptação.
  • Só quem consegue iniciar sessão por SSH lhe consegue aceder. Utiliza, portanto, a forte proteção que já tem.

Se já houver algo a correr na porta 5432 do seu portátil, escolha outro número à esquerda: -L 15432:127.0.0.1:5432, e ligue-se à porta 15432. Se colocar o túnel em ~/.ssh/config, tê-lo-á sempre à mão:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

Com ssh -N web1-db obtém apenas o túnel, sem linha de comandos.

Através de um servidor intermédio: ProxyJump

Por vezes só é possível chegar a um servidor através de outro, por exemplo um servidor de base de dados sem endereço IP público por trás do seu servidor web. O ProxyJump salta através do primeiro servidor para o segundo:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

A diferença em relação ao agent forwarding (lição 2.1): com o ProxyJump, a encriptação vai de ponta a ponta entre o seu portátil e db1. O servidor intermédio limita-se a passar os pacotes e não pode utilizar a sua chave.

Outro número de porta: sim ou não?

Muitos guias recomendam colocar o SSH noutra porta, por exemplo 2222. O que faz isso realmente?

  • Reduz o ruído: a maioria das tentativas automatizadas de adivinhar credenciais experimenta apenas a porta 22. O seu registo fica mais calmo.
  • Não é uma medida de segurança. Um scanner que percorra todas as portas encontra o SSH em segundos pelo seu banner de versão.

Com chaves e o início de sessão por palavra-passe desativado (lição 2.2), a porta pouco importa para a segurança. Se mesmo assim quiser mudar, faça-o pela ordem certa: abrir a nova porta na firewall, pôr o SSH a escutar em ambas as portas, testar numa segunda janela e só então fechar a porta antiga. No Ubuntu 24.04 e posteriores, isso inclui systemctl daemon-reload e systemctl restart ssh.socket (lição 2.2). Não se esqueça de que o seu fornecedor pode também ter uma firewall.

Revogar o acesso

Um antigo colega ou um programador web tinha uma chave no seu servidor e já não trabalha para si? Revogar o acesso é simples, desde que mantenha o registo:

  1. Veja todas as chaves: ssh-keygen -lf ~/.ssh/authorized_keys, e faça-o para cada utilizador (incluindo /root/.ssh/authorized_keys).
  2. Remova a linha dessa pessoa.
  3. Se utilizava uma conta de utilizador própria, bloqueie-a (lição 3.1) e verifique se pertencia ao grupo sudo (lição 3.2).
  4. Se viu palavras-passe, como a palavra-passe de uma base de dados num ficheiro de configuração, substitua-as também.

Uma chave comum não tem data de validade. O que não remover continua a funcionar, mesmo anos depois. Se der acesso temporário a alguém, pode colocar a opção expiry-time="20261231" antes da linha dessa pessoa em authorized_keys; depois dessa data, o servidor recusa a chave.

Resumo

  • ~/.ssh/config no seu próprio computador guarda, por servidor, o nome, o utilizador, a porta e a chave; Host * fica no fim.
  • scp para ficheiros individuais, rsync para pastas (atenção à barra e a --delete), sftp em vez de FTP.
  • Com ssh -L acede a uma base de dados através de um túnel encriptado, enquanto a porta da base de dados continua fechada ao exterior.
  • O ProxyJump salta com segurança através de um servidor intermédio; é melhor do que o agent forwarding.
  • Outro número de porta reduz o ruído, mas não protege. As chaves que não remover continuam a funcionar.

Questionário

1. O que faz ssh -L 15432:127.0.0.1:5432 web1?



2. Porque é que um túnel SSH para uma base de dados é melhor do que abrir a porta 5432 na firewall?



3. Muda o SSH para a porta 2222. Qual é o efeito mais importante?



4. No seu ~/.ssh/config consta, no topo, Host * com User root e, mais abaixo, Host web1 com User anna. Com que utilizador inicia sessão em ssh web1?



5. Um programador web tinha uma chave SSH própria no seu servidor e já não trabalha para si. O que NÃO é suficiente?



Exercício

Exercício O2.3: Uma configuração SSH e um túnel. Crie no seu próprio computador um ~/.ssh/config com uma alcunha para o seu servidor, inicie sessão apenas com ssh <bijnaam>, copie um ficheiro com scp ou rsync e crie um túnel com -L para um serviço que no seu servidor escuta apenas em 127.0.0.1 (se ainda não tiver uma base de dados, utilize a porta 22 do próprio servidor: ssh -L 2200:127.0.0.1:22 <bijnaam> e depois ssh -p 2200 anna@localhost). Responda às perguntas sobre o que o túnel faz e porque é que a porta não precisa de estar aberta.

Exercício O2.3: Uma configuração SSH e um túnel

Este exercício faz você mesmo; ninguém o verifica. Assinale o que já fez e marque o exercício como concluído.




As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.

Para saber mais

Os passos destes artigos aplicam-se aos VPS e painéis da WebOké; noutros fornecedores, o funcionamento é semelhante.

Um momento…

Configurar os seus domínios

Para cada domínio, defina os servidores de nomes, a ligação ao seu alojamento e quem fica como titular.

A carregar os seus domínios…