web-dev-qa-db-fra.com

PostgreSQL via le tunnel SSH

Je voudrais utiliser RazorSQL pour me connecter à ma base de données qui s'exécute sur un serveur distant. Je crée un tunnel SSH sur mon hôte local avec la commande suivante:

ssh -L 1111:remote.server.com:5432 [email protected]

Je configure ma connexion via l'interface graphique de RazorSQL, en spécifiant localhost comme hôte et 1111 comme port. Lorsque je clique sur "Connect", le message d'erreur suivant apparaît:

ERROR: An error occurred while trying to make a connection to
the database: 

JDBC URL: jdbc:postgresql://localhost:1111/myuser

FATAL:
no pg_hba.conf entry for Host "aaa.bbb.ccc.ddd",
user "myuser", database "mydatabase", SSL off

aaa.bbb.ccc.ddd est l'adresse IP d'un serveur distant.

De plus, je ne suis pas autorisé à modifier le contenu de mon pg_hba.conf fichier. Voilà à quoi ça ressemble en ce moment:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
@remove-line-for-nolocal@local   all         all                               @authmethod@
# IPv4 local connections:
Host    all         all         127.0.0.1/32          @authmethod@
# IPv6 local connections:
Host    all         all         ::1/128               @authmethod@

Est-il possible de se connecter au serveur de base de données via le tunnel SSH en utilisant ma configuration actuelle et sans modifier la configuration du serveur?

44
kozooh

Votre pg_hba.conf semble autoriser les connexions depuis localhost. Le moyen le plus simple de faire apparaître vos connexions de tunnel SSH à partir de localhost est de les rendre en localhost.

La commande SSH suivante se connecte à remote.example.com en tant qu'utilisateur "utilisateur" et fait écouter votre client ssh sur localhost, port 1111/tcp. Toutes les connexions établies à ce port seront transmises via le tunnel ssh, et du côté serveur ssh, les connexions seront établies avec localhost, port 5432/tcp. Puisque nous nous connectons à localhost, les connexions sembleront provenir également de localhost et devraient correspondre à votre ligne pg_hba.conf existante.

ssh -L 1111:localhost:5432 [email protected]

Si cela devrait être un tunnel de longue durée, je recommanderais d'utiliser autossh

Pour vous connecter à l'aide du client psql sur l'hôte sur lequel vous exécutez le client ssh, utilisez quelque chose comme ceci:

psql -h localhost -p 1111 -U your-db-username database-name

Vous devez ensuite être invité à saisir le mot de passe de votre utilisateur de base de données.

Vous pouvez également ajouter une ligne ligne comme suit à un fichier appelé .pgpass dans votre répertoire personnel sur le client sur lequel vous exécutez psql:

localhost:1111:database-name:your-db-user:your-db-password
74
jeff