PDO pgsql et connection distante
Le
Une Bévue
j'ai un bd PostgreSQL sur un serveur distant et je voudrais m'y
connecter, comment faire ?
en local aussi j'ai un serveur Postgresql, je m'y connecte par :
$db = new PDO("pgsql:dbname=$dbname;host=$host", $username, $password );
je voudrais pouvoir faire "la même chose" avec un serveur disant dont je
connais l'IPV6.
j'ai essayé de m'y connecter par ssh2 mais ça me retourne une erreur
d'identification, aussi bien avec password :
ssh2_auth_password($con, "yt", $password);
qu'avec clé :
ssh2_auth_hostbased_file($con, 'yt', $IPV6, '/home/yt/.ssh/id_dsa.pub',
'/home/yt/.ssh/id_dsa', $passphrase, 'yt');
au terminal, je peux me connecter simplement par :
ssh yt@iMac
car l'IPV6 de mon iMac est dans mon .ssh/config
connecter, comment faire ?
en local aussi j'ai un serveur Postgresql, je m'y connecte par :
$db = new PDO("pgsql:dbname=$dbname;host=$host", $username, $password );
je voudrais pouvoir faire "la même chose" avec un serveur disant dont je
connais l'IPV6.
j'ai essayé de m'y connecter par ssh2 mais ça me retourne une erreur
d'identification, aussi bien avec password :
ssh2_auth_password($con, "yt", $password);
qu'avec clé :
ssh2_auth_hostbased_file($con, 'yt', $IPV6, '/home/yt/.ssh/id_dsa.pub',
'/home/yt/.ssh/id_dsa', $passphrase, 'yt');
au terminal, je peux me connecter simplement par :
ssh yt@iMac
car l'IPV6 de mon iMac est dans mon .ssh/config

Poser une question


J'ai -un peu- progressé.
Si j'établis un tunnel au terminal :
$ ssh -L 3333:localhost:5432
alors, je peux me connecter à psql depuis php :
$host="localhost";
$port333;
$db = new PDO("pgsql:dbname=$dbname;host=$host;port=$port",
$username, $password );
$ret=$db->query('SELECT * FROM categories;');
maintenant, il me reste à pouvoir établir le tunnel depuis php.
normalement, je n'ai pas besoin d'authentification car j'ai un ssh-add
au login.
Le 31/03/2012 18:21, Une Bévue a écrit :
Euh...
Pourquoi utiliser ssh et ne pas tout simplement indiquer l'IP du serveur
distant dans $host ?
A moins de vouloir sécuriser la chose, bien sûr.
Non, il vaut mieux faire exécuter cela dans un script de démarrage à mon
avis.
Amicalement, Vincent Verdon
j'ai essayé, avec son IPV6, si je me souviens bien ça n'a pas marché,
peut_être que le port 5432 n'est pas ouvert ?
j'y ai pensé, en effet ça semble plus facile qu'à faire en php.
donc, ok pour le tunnel dans un script de logging.
mais, par ailleurs comment utiliser ssh2 depuis php ?
j'ai essayé, je peux me connecter, lire le fingerprint mais j'ai tjs
"authentification fail" meme avec passphrase.
en fait, je viens juste de ré-essayer, j'obtiens le message d'erreur
suivant :
Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[08006] [7] FATAL: no pg_hba.conf entry for host "<mon IPV6>",
user "yt", database "landp_public", SSL off' in
/home/yt/Sites/landp_public/landp_imac.php:48
Stack trace:
#0 /home/yt/Sites/landp_public/landp_imac.php(48):
PDO->__construct('pgsql:dbname=la...', 'yt', 'yvon5533')
#1 {main}
thrown in /home/yt/Sites/landp_public/landp_imac.php on line 48
donc je dois configurer côté serveur distant.
ou passer en stunnel (ssl tunnel) comme indiqué sur c.l.php.
ce que je n'ai jamais fait.
Le 01/04/2012 08:03, Une Bévue a écrit :
oui, le message indique qu'il n'y a pas d'utilisateur autorisé à se
connecter à la base accessible à l'adresse ipv6.
Sauf pour sécuriser le transfert des données, je n'en vois pas l'utilité.
Amicalement, Vincent Verdon
pour info, un extrait de la doc de Postgre :
Pour se connecter à une base particulière, un utilisateur doit non
seulement passer les vérifications de pg_hba.conf mais doit également
avoir le droit CONNECT sur cette base.
Pour contrôler qui peut se connecter à quelles bases, il est en général
plus facile de le faire en donnant ou retirant le privilège CONNECT
plutôt qu'en plaçant des règles dans le fichier pg_hba.conf.
Amicalement, Vincent Verdon
pas mal, cette info, merci bien !
en fait je crée un tunnel ssh (port forwarding) et je travaille sur les
bds de mon desktop depuis mon portable sans soucis.
j'ai mis la commande à mon login.
en fait, bien évidemment, j'ai essayé, par le biais de pg_hba.conf
d'ajouter une connection depuis une IP en ajoutant une ligne, par exemple :
host all yt 192.168.0.20 password
en LAN.
mais, dans ce cas, je ne sais pourquoi, le server psql ne se lance plus
et ceci sans erreur au restart.
il me faut commenter cette ligne et redémarrer le serveur pour que ça
remarche.
j'ai donc trouvé un workaround en créant un tunnel ssh, ce qui me semble
être le plus simple en tk pour moi...
Ben en fait ssl, que je ne connais pas du tout, m'apporterait peu de
sécurité supplémentaire, je pense.
L'accès de ma base fixe, au niveau ip, se fait par IPV6 et les deux
adresses admises à si connecter le sont par seulement deux adresses IPV6.
+ un mdp.
non cripté, je ne sais pas comment utiliser le md5.
ce serait plus sécure, j'imagine que je dois faire une transo :
mot de passe en clair -> md5 -> mot de passe cripté.
oui, mais, ça, c'est en local, pour pouvoir se connecter en remote,
d'après ce que j'ai compris, il faut bien éditer pg_hba.conf non ?