# Ligar à Sua Base de Dados Através de um Túnel SSH

Source: https://support.kapsulehost.com/pt-pt/database-ssh-tunnel

O site de dados do seu site apenas escuta no endereço de loopback do próprio servidor, pelo que uma ferramenta de ambiente de trabalho como o TablePlus, Sequel Ace, DBeaver ou MySQL Workbench não consegue contactá-lo diretamente. Um túnel SSH dá a essas ferramentas uma porta local que é encaminhada para a base de dados, e é assim que se consegue uma interface gráfica adequada aos seus dados sem expor o MySQL à internet.

## Porque É Necessário um Túnel

Abra **Websites**, clique no site e depois em **Base de dados**. O cartão **Detalhes de ligação** mostra o anfitrião como `127.0.0.1` e a porta como `3306`. Isto não é um valor de preenchimento: a base de dados aceita genuinamente apenas ligações da máquina onde é executada. Nada na internet pública consegue alcançar a porta 3306, o que elimina toda uma categoria de ataques.

Um túnel SSH fecha essa lacuna com segurança. O seu cliente SSH abre uma porta no seu portátil, encripta tudo o que lhe envia, e entrega-o à base de dados a partir de dentro do servidor, exatamente como se um processo local se tivesse ligado.

![Separador Database a mostrar os detalhes de ligação no KPanel](https://support.kapsulehost.com/help/screenshots/database-ssh-tunnel.84df4ba6.webp)

## O Que Precisa Primeiro

> **Note:** Um túnel é uma ligação SSH, pelo que precisa de ter uma chave SSH registada no site antes de qualquer um destes passos funcionar. Siga primeiro [Adicionar Chaves SSH a um Site](https://support.kapsulehost.com/pt-pt/adding-ssh-keys) e depois volte aqui.

Reúna quatro elementos:

- **Anfitrião SSH, porta e nome de utilizador**, em **Definições**, depois **Chaves SSH**, no cartão **Detalhes de ligação**.
- **Nome da base de dados, utilizador e palavra-passe**, em **Base de dados**. Clique no ícone do olho para revelar a palavra-passe e no ícone de cópia para a colocar na área de transferência.

Se o separador Database indicar **No database provisioned for this site type**, este site não tem uma base de dados. Sites estáticos e alguns sites Node.js são criados sem base de dados.

## Abrir o Túnel a Partir de um Terminal

A forma geral é: encaminhar uma porta local para `127.0.0.1:3306` do outro lado da ligação SSH.

```sh
ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
```

- `-L 3307:127.0.0.1:3306` abre a porta 3307 na sua máquina e encaminha-a para a porta 3306 na interface de loopback do servidor.
- `-N` indica para não executar uma shell, apenas manter o túnel aberto.
- Acrescente `-i /path/to/key` se a chave deste site não for a sua chave predefinida.

Deixe essa janela de terminal em execução. Enquanto estiver aberta, `127.0.0.1:3307` no seu portátil é a base de dados do site.

> **Tip:** Use a porta 3307 localmente em vez de 3306. Se tiver o MySQL ou o MariaDB instalado na sua própria máquina, esta já está a usar a porta 3306, e o túnel não conseguirá associar-se, resultando num erro de "endereço já em uso". Qualquer porta local livre funciona.

## Apontar o Seu Cliente de Base de Dados Para o Túnel

No seu cliente gráfico, crie uma ligação MySQL simples com estes valores:

| Campo | Valor |
|---|---|
| Anfitrião | `127.0.0.1` |
| Porta | `3307` (a porta local que encaminhou) |
| Utilizador | O **Username** do separador Database |
| Palavra-passe | A **Password** do separador Database |
| Base de dados | O nome em **Base de dados** do separador Database |

Não coloque o anfitrião SSH no campo Host. No que diz respeito ao cliente, este está a falar com uma base de dados na sua própria máquina.

### Clientes Com um Separador SSH Incorporado

O TablePlus, Sequel Ace, DBeaver e MySQL Workbench conseguem todos gerir o túnel por conta própria, o que evita manter um terminal aberto. Preencha dois grupos de campos:

- **Secção SSH**: anfitrião, porta, nome de utilizador e ficheiro de chave privada a partir da página Chaves SSH.
- **Secção da base de dados**: anfitrião `127.0.0.1`, porta `3306`, mais o nome da base de dados, o utilizador e a palavra-passe do separador Database.

Quando o cliente cria o túnel, use `3306` na secção da base de dados em vez da sua porta local encaminhada. O cliente está a ligar-se do ponto de vista do servidor, pelo que vê a porta real.

## Usar o phpMyAdmin em Alternativa

Se só precisar de dar uma vista de olhos rápida a uma tabela, não precisa de um túnel de todo. O separador Database tem um cartão **phpMyAdmin** com um botão **Abrir phpMyAdmin**. Este autentica-o através do KPanel, pelo que não há nenhuma palavra-passe separada a memorizar, e abre num novo separador já apontado para a base de dados deste site.

O phpMyAdmin é a opção mais rápida para navegar, executar uma consulta pontual ou verificar um valor. Um cliente de ambiente de trabalho através de um túnel é melhor para exportações grandes, trabalho de esquema e tudo o que queira automatizar com scripts. Consulte [Usar o phpMyAdmin](https://support.kapsulehost.com/pt-pt/sites-phpmyadmin) para a via do navegador.

## Executar Consultas e Dumps Através do Túnel

Com o túnel aberto, as ferramentas de linha de comandos padrão funcionam normalmente, apontadas para a sua porta local encaminhada:

```sh
mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql
```

> **Warning:** Um dump manual é uma cópia de conveniência, não uma estratégia de cópias de segurança. Está apenas tão atualizado quanto o momento em que o executou, e fica guardado no portátil a partir do qual o executou. A KapsuleHost já efetua cópias de segurança diárias automáticas do site, mantidas durante 30 dias. Consulte [Efetuar uma Cópia de Segurança](https://support.kapsulehost.com/pt-pt/taking-a-backup) antes de confiar num ficheiro `.sql` local.

## Resolução de Problemas

**"Address already in use" ao abrir o túnel.** Algo na sua máquina já está a usar essa porta local. Escolha outra, por exemplo `-L 3399:127.0.0.1:3306`, e altere a porta no seu cliente para corresponder.

**"Connection refused" do cliente de base de dados.** O túnel não está ativo. Verifique se o terminal SSH ainda está em execução e não apresentou nenhum erro, e se a porta no seu cliente corresponde à porta local no argumento `-L`.

**O SSH liga-se mas o cliente continua a atingir o tempo limite.** Confirme que encaminhou para `127.0.0.1:3306` e não para o nome de anfitrião público. Encaminhar para o nome público pede ao servidor para alcançar a base de dados através da internet, o que é exatamente o que está bloqueado.

**"Access denied for user".** O início de sessão SSH foi bem-sucedido, mas as credenciais do MySQL estão erradas. Copie novamente o nome de utilizador e a palavra-passe do separador Database usando os ícones de cópia em vez de os voltar a escrever, e verifique se está a ligar-se ao nome de base de dados correto.

**Permission denied (publickey) antes sequer de chegar ao MySQL.** Isso é a camada SSH, não a base de dados. Percorra a secção de resolução de problemas em [Adicionar Chaves SSH a um Site](https://support.kapsulehost.com/pt-pt/adding-ssh-keys).

## Próximos Passos

- [Carregar Ficheiros Com SFTP](https://support.kapsulehost.com/pt-pt/sftp-access) usa as mesmas credenciais SSH para transferência de ficheiros.
- [Usar o phpMyAdmin](https://support.kapsulehost.com/pt-pt/sites-phpmyadmin) para trabalho de base de dados através do navegador.
- [Restaurar a Partir de uma Cópia de Segurança](https://support.kapsulehost.com/pt-pt/restoring-from-backup) caso uma consulta tenha ido mais longe do que pretendia.
