Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PDO pgsql et connection distante

14 réponses
Avatar
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

10 réponses

1 2
Avatar
Une Bévue
Le 31/03/2012 16:55, Une Bévue a écrit :
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
car l'IPV6 de mon iMac est dans mon .ssh/config





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.
Avatar
Vincent Verdon
Bonsoir,

Le 31/03/2012 18:21, Une Bévue a écrit :
Le 31/03/2012 16:55, Une Bévue a écrit :
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
car l'IPV6 de mon iMac est dans mon .ssh/config





J'ai -un peu- progressé.
Si j'établis un tunnel au terminal :
$ ssh -L 3333:localhost:5432



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.

maintenant, il me reste à pouvoir établir le tunnel depuis php.



Non, il vaut mieux faire exécuter cela dans un script de démarrage à mon
avis.

Amicalement, Vincent Verdon
Avatar
Une Bévue
Le 31/03/2012 22:02, Vincent Verdon a écrit :
Euh...
Pourquoi utiliser ssh et ne pas tout simplement indiquer l'IP du serveur
distant dans $host ?



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 ?

A moins de vouloir sécuriser la chose, bien sûr.

maintenant, il me reste à pouvoir établir le tunnel depuis php.



Non, il vaut mieux faire exécuter cela dans un script de démarrage à mon
avis.



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.
Avatar
Une Bévue
Le 01/04/2012 07:24, Une Bévue a écrit :
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 ?



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.
Avatar
Vincent Verdon
Bonjour,

Le 01/04/2012 08:03, Une Bévue a écrit :
Le 01/04/2012 07:24, Une Bévue a écrit :
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 ?



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>",

donc je dois configurer côté serveur distant.



oui, le message indique qu'il n'y a pas d'utilisateur autorisé à se
connecter à la base accessible à l'adresse ipv6.

ou passer en stunnel (ssl tunnel) comme indiqué sur c.l.php.
ce que je n'ai jamais fait.


Sauf pour sécuriser le transfert des données, je n'en vois pas l'utilité.

Amicalement, Vincent Verdon
Avatar
Vincent Verdon
Re,

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
Avatar
Une Bévue
On 02/04/12 16:40, Vincent Verdon wrote:
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.



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.
Avatar
Une Bévue
On 02/04/12 16:40, Vincent Verdon wrote:
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.



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...
Avatar
Une Bévue
Le 02/04/2012 16:37, Vincent Verdon a écrit :
Sauf pour sécuriser le transfert des données, je n'en vois pas l'utilité.


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é.
Avatar
Une Bévue
Le 02/04/2012 16:40, Vincent Verdon a écrit :
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.



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 ?
1 2