[PHP] MySQL verbinding met SSH (php_ssh2.dll)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Voor een bepaald project is het alleen mogelijk via SSH te verbinden naar MySQL. Via EMS MySQL Manager Lite lukt dit prima. Ik verbind naar de MySQL server met de normale instellingen van onze externe MySQL server en kies als SSH-instellingen de gegevens die ik van onze provider gekregen heb.

Het moet echter wel zo zijn dat ik ook via PHP kan verbinden naar deze MySQL server, maar dat is me dus nog niet gelukt, voornamelijk omdat ik er niet helemaal uitkom met de PHP ssh2_tunnel functie.

Volgens vele google sites moet ik als het ware een soort van mapping maken:
[port1]:[mysqlserver]:[port2] (maar wij draaien dus geen SSH server, we nemen die van onze provider).
en dan verbinden naar de mysql server op localhost:port1.

In PHP lukt me dit echter niet. Wat er op de achtergrond van EMS MySQL Manager Lite gebeurd is me dus ook een raadsel.

Ik heb nu het volgende geprobeerd:
PHP:
1
2
3
4
5
$connection = ssh2_connect('shell.onzeprovider.com', 22);
ssh2_auth_password($connection, 'username', 'pass'); //tot hier gaat het prima! Verbinding werkt.

//tunnel opzetten
$tunnel = ssh2_tunnel($connection,'mysql-server-bij-provider.com',3306); //dit gaat ook goed


Ik heb bij de ssh2_tunnel functie elke mogelijke combinatie geprobeerd, maar niks lukte behalve het bovenstaande. Het is me namelijk onduidelijk hoe die functie werkt.

In ieder geval heb ik nu dus als het goed is een tunnel, maar hoe ik dan daarnaar moet connecten is me een raadsel via mysql_connect of mysqli_connect. Wat moet ik invullen als server? Wat als port? Heb al vanalles geprobeerd (localhost:22, localhost:3306, mysql_server_bij_provider.com:22 en 3306, shell.onzeprovider:22 3306 etc). Van gekheid wist ik dus niet meer wat ik moest doen.

EDIT:
Als ik nu als mysql-server invul: shell.onzeprovider.com:22 dan krijg ik wel verbinding maar dan:
Lost connection to MySQL server at 'reading initial communication packet'

[ Voor 10% gewijzigd door armageddon_2k1 op 17-03-2009 15:08 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 16-09 16:01
Kan je niet gewoon op jullie webserver een SSH tunnel opzetten en dan via localhost naar deze tunnel verbinden aangezien je nu elke keer wilt inloggen met SSH wat de snelheid niet ten goede komt!

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Het vervelende is dat onze MySQL configuratie + onze net nieuwe Cisco router dit niet wil toestaan. Op een of andere manier pikt de Cisco router geen MySQL verbindingen naar buiten toe. Zelfs andere ports gebruiken heeft geen zin.... maar de Cisco customer-support is niet heel flexibel, dus het duurt even voordat dat gefixt is waarschijnlijk.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Wat GrooV bedoelt, is een SSH-tunnel is die permanent open staat. PHP verwijs je vervolgens naar het lokale endpoint van die tunnel (met andere woorden localhost, je eigen machine). Tot dat punt is er nog geen Cisco router aan de orde geweest. Die ziet enkel een openstaande SSH-verbinding, meer niet.

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ah okee, dat is het proberen wel waard.
Onze server is een Windows Server 2003 based machine. Enig idee hoe ik dit het snelste opzet? We hebben al gekeken naar dingen als openSSH e.d., maar dan zet je volgens mij een SSH-server op.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Als het bij wijze van test is kan je natuurlijk gewoon PuTTY draaien als een ingelogde gebruiker. Niet de meest nette oplossing, maar als het tijdelijk is moet het wel te doen zijn. Genoeg tutorials van te vinden.

Met iets meer moeite kan je het draaien als NT Service, en dan kom je uit op iets als MyEnTunnel (http://nemesis2.qx.net/pages/MyEnTunnel).

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Bedankt! Het werkt perfect met Putty.
Dit scheelt heeeeel veel werk,

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Bijkomend voordeel is dat wanneer je de boel verhuist, gewoon enkel localhost in iets anders hoeft te veranderen :)

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 05:37

CyBeRSPiN

sinds 2001

spone schreef op dinsdag 17 maart 2009 @ 15:57:
Bijkomend voordeel is dat wanneer je de boel verhuist, gewoon enkel localhost in iets anders hoeft te veranderen :)
En nadeel is dat Putty niet vanzelf opstart bij een reboot, en systeembeheer voor een bizar raadsel komt te staan waarom mysql niet meer kan verbinden ;)

Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
CyBeRSPiN schreef op dinsdag 17 maart 2009 @ 16:03:
[...]

En nadeel is dat Putty niet vanzelf opstart bij een reboot, en systeembeheer voor een bizar raadsel komt te staan waarom mysql niet meer kan verbinden ;)
spone schreef op dinsdag 17 maart 2009 @ 15:24:
Met iets meer moeite kan je het draaien als NT Service, en dan kom je uit op iets als MyEnTunnel (http://nemesis2.qx.net/pages/MyEnTunnel).
;)

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Zo, alles draait nu prima vanaf de server.
Maar ik heb toch een vraag.

De server kan de externe MySQL server benaderen via localhost:3307, maar de computers binnen het netwerk zouden dat eigenlijk ook moeten kunnen. Ik dacht dus gewoon [onze server]:3307 te doen, maar dat lukte dus niet.

Toen ging ik in MyENTunnel kijken en zag dat ik zowel Internal en External tunnels in kon stellen.
Ik heb werkelijk waar elke combinatie geprobeerd in zowel Internal als External, maar het lukt maar niet.

De interne tunnel is nu:
3307:[externe mysql server]:3306 (wat dus inhoudt localhost:3307:[ext server]:3306, als ik het goed begrijp.

Voor mijn gevoel moet ik dan dit doen, bij eventueel internal als external tunnels (weet dus niet welke):
[ip van server binnen netwerk]:3307:[externe server]:3306 OF
[naam van server]:3307:[externe server]:3306

maar geen van deze werkt.

EDIT: Dit is zo raar! Het werkt nu prima. Ik snapte niet hoe het nou kwam. Maar het lijkt alsof MyEnTunnel niet altijd de laatste settings.

[ Voor 8% gewijzigd door armageddon_2k1 op 25-03-2009 12:08 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 20-09 00:06
In PuTTY had je een vinkje moeten zetten bij "Local ports accept connections from other hosts", hoe dit bij MyEnTunnel zit weet ik niet.

Ik vraag me trouwens af waarom je dit nodig hebt. Ik vermoed dat je "productie" php app op de server gewoon zonder SSH naar localhost mysql kan connecten, en dat je voor ontwikkeling een connectie wil maken met MySQL op de productieserver. Dat er geen directe verbinding wordt toegestaan maar alleen via een SSH tunnel is voor een productieomgeving dan ook erg logisch qua beveiliging.

Als dit zo is zou ik toch eens heroverwegen of je ontwikkeling niet beter op een kopie van de database op een lokale of intranet MySQL server kan werken. Stel je voor dat een stagiare opeens een where clause bij een delete vergeet ofzo.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
We draaien een productie en een live-db, maar enquetes worden ingevuld op de live-versie en daar willen we data van uitlezen van binnen ons eigen netwerk. Althans, dat is de eis van de baas....ik zag het liever anders.
Enfin, het werkt prima nu. Gelukkig is het maar voor incidenteel verkeer.

Engineering is like Tetris. Succes disappears and errors accumulate.

Pagina: 1