Desenvolvimento e bases de dados

Ligação remota e segura ao servidor MySQL

Revisto a 5 min de leitura MySQL acesso remoto

Uma ligação MySQL remota sem cifrar pode expor as credenciais e os dados trocados. Um túnel SSH cifra o troço entre o seu computador e o servidor sem precisar de uma autorização direta para o IP do seu computador no MySQL. O túnel não fecha a porta pública do serviço gerido.

Este guia utiliza o túnel SSH disponível nos planos com acesso SSH. Antes de continuar, ative e configure o acesso SSH com uma chave Ed25519 protegida por uma frase-passe.

Ligação a partir de um cliente MySQL com suporte SSH

Se o seu cliente de bases de dados incluir suporte SSH, pode criar o túnel automaticamente. Ao criar a ligação, configure em separado os separadores de SSH e de MySQL.

Na configuração SSH, indique:

  • Servidor SSH: o nome do servidor que consta dos dados técnicos do alojamento. Evite um domínio atrás de um proxy ou que aponte para outro fornecedor
  • Porta SSH: 93, salvo se os dados do seu serviço indicarem outra
  • Utilizador SSH: o seu utilizador do cPanel
  • Autenticação: chave privada Ed25519
  • Chave privada: o caminho local da chave cuja parte pública autorizou no cPanel

Proteja a chave com uma frase-passe e utilize o agente de chaves ou o armazenamento seguro do cliente para a desbloquear. Não guarde a palavra-passe do cPanel na ligação.

Na configuração MySQL, indique:

  • Servidor MySQL: 127.0.0.1
  • Porta MySQL: 3306
  • Utilizador e palavra-passe MySQL: os de um utilizador limitado à base de dados necessária
  • Base de dados: o nome completo criado no cPanel

O cliente abre primeiro a sessão SSH e, dentro desse túnel, liga-se ao MySQL em 127.0.0.1. Antes de aceitar a primeira ligação SSH, verifique a impressão digital do servidor, como explica o guia indicado.

Criar o túnel a partir do terminal do seu computador

Também pode abri-lo com o OpenSSH. Este comando é executado no seu computador, não dentro do alojamento. Substitua o servidor, o utilizador e o caminho da chave:

ssh -N -T -p 93 -i ~/.ssh/id_ed25519 \
  -o ExitOnForwardFailure=yes \
  -L 127.0.0.1:13306:127.0.0.1:3306 \
  usuario_cpanel@servidor.example.com

O terminal fica aberto sem mostrar uma shell remota. Enquanto continuar ligado, configure o seu cliente MySQL com o host 127.0.0.1, a porta 13306 e o utilizador e a palavra-passe da base de dados. Neste caso, não ative também o túnel integrado do cliente.

A escuta limita-se ao seu próprio computador. Não substitua 127.0.0.1 por 0.0.0.0, que poderia permitir a utilização do túnel a partir de outros computadores da rede. Ao terminar, feche a ligação MySQL e prima Ctrl+C no terminal do túnel.

Se não ligar

  • Address already in use: a porta local 13306 está ocupada. Escolha outra porta local livre e use esse mesmo número no cliente MySQL.
  • Permission denied (publickey): verifique o utilizador SSH, a chave escolhida e que a sua parte pública está autorizada na conta.
  • Administratively prohibited: o servidor rejeita o reencaminhamento. Pergunte ao suporte se essa conta admite túneis; ativar o SSH não significa que qualquer modalidade de reencaminhamento seja permitida.
  • Access denied do MySQL: o túnel pode estar a funcionar. Reveja as credenciais MySQL e a associação do utilizador à base de dados, que são independentes do SSH.
  • Erro de impressão digital do servidor: confirme a alteração com o suporte antes de substituir a impressão digital guardada.

A cifra SSH protege o troço até ao servidor SSH. Este exemplo liga-se a partir daí ao MySQL local; se o destino fosse outro servidor, teria de avaliar e proteger também esse troço.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.