Banco atrás de Bastion (SSH)

Quando o banco não é alcançável de onde o backup roda, o BackupAlly abre um túnel ssh -L por um bastion e conecta em 127.0.0.1:<porta local>. O túnel é aberto uma vez por execução da task, antes do primeiro dump, e fechado ao fim — com sucesso ou erro. Nenhum processo ssh sobrevive ao backup.

Configuração

[target]
kind = "database"
driver = "postgres"
host = "10.0.0.5"        # ignorado quando ssh.enabled = true
port = 5432
user = "${secret:pg_user}"
password = "${secret:pg_password}"

[target.ssh]
enabled = true
host = "bastion.exemplo.com"     # obrigatório
user = "backup"                  # padrão: root
port = 22
key_path = "/etc/backupally/keys/bastion"   # ou deixe em branco e use o agente ssh
remote_host = "10.0.0.5"         # host do banco VISTO DO BASTION (padrão: localhost)
# connect_timeout_secs = 15
Campo Padrão Descrição
enabled false Liga o túnel
host — Bastion (obrigatório)
user root Usuário no bastion
port 22 Porta do sshd do bastion
key_path — Chave privada; sem ela o ssh usa o agente e o ~/.ssh/config
remote_host localhost Host do banco visto do bastion
connect_timeout_secs 15 Prazo para o túnel ficar pronto

O ssh usado é o do sistema: ~/.ssh/config, known_hosts e o agente do servidor valem. Nunca há prompt interativo (BatchMode); sem chave nem agente, o túnel falha com autenticação ssh falhou.

Host key

Primeira conexão grava a chave do bastion no known_hosts (StrictHostKeyChecking=accept-new). Se a chave mudar depois, o backup falha com host key mudou para <host>. Se a troca foi legítima (bastion reinstalado), remova a entrada antiga:

ssh-keygen -R bastion.exemplo.com

Testar antes de agendar

backupally task validate <id> --deep

Abre o túnel de verdade, testa o banco por ele e fecha. A linha ssh mostra o bastion, o destino e a porta local usada.

Vários bancos, um túnel

database = "*" ou modo individual: o mesmo túnel serve todos os bancos do run. Duas tasks diferentes abrem túneis diferentes, cada uma na sua porta local, mesmo apontando para o mesmo bastion.

Drivers

MySQL, PostgreSQL, MongoDB (forma host/port; uri não passa pelo túnel) e ClickHouse. sqlite e fileset não aceitam [target.ssh].

Erros

Erro Causa O que fazer
chave ssh não encontrada: <path> key_path não existe Corrija o caminho
autenticação ssh falhou Chave não autorizada no bastion ou agente sem ela ssh -i <key> user@bastion à mão
host key mudou para <host> Chave do bastion diferente da gravada ssh-keygen -R <host> se legítimo
túnel ssh saiu antes de ficar pronto: … O ssh encerrou (rede, porta remota fechada, forward negado) Veja o texto após o traço: é o stderr do ssh
túnel ssh não ficou pronto em 15s Bastion lento ou remote_host:porta não responde Aumente connect_timeout_secs; confira o destino visto do bastion
By Borlot.com.br on 05/09/2026