Connect to a mysql database via SSH through PHP

16,923

Solution 1

I think you are out of luck on this one. You can either use the ssh extension in your PHP code, or if you have access to the server, you could try to create a ssh tunnel on the command-line.

You probably need special permissions to do that, though. It also looks like you don't have ssh access to this hosting account.

duplicate answered by @jpm

Setting up tunneling posted by @Ólafur Waage on Connect to a MySQL server over SSH in PHP

And this one for tunneling by @Sosy

shell_exec(“ssh -f -L 3307:127.0.0.1:3306 [email protected] sleep 60 >> logfile”);  
$db = mysqli_connect(’127.0.0.1′, ‘sqluser’, ‘sqlpassword’, ‘rjmadmin’, 3307);

Solution 2

The mysql extension doesn't currently support this. Modifying the extension, itself, might not be that difficult, but at that point, it'd have to be a custom PECL extension, at best. The idea was discussed on the PHP Internals mailing list a while back:

http://comments.gmane.org/gmane.comp.php.devel/79520

Share:
16,923
Lugubrious
Author by

Lugubrious

Updated on June 09, 2022

Comments

  • Lugubrious
    Lugubrious almost 2 years

    I have already written a php file that connects to the mysql database locally. Now, I want to connect to a remote database via SSH. Currently the connect function for my database is the following in php:

    $this->db = new mysqli(_SERVR_URL, _SERVR_USER , _SERVR_PASS, _SERVR_DB);
        if ($this->db->connect_errno) {
            echo "Failed to connect to MySQL: (" . $this->db->connect_errno . ") " . $this->db->connect_error;
        }
        else{
            //echo "Successfully connected!! <BR><BR>";
        }
    

    I want to only change the connect function (above) so that the rest of the code still works. I have successfully installed the phpseclib and am not interested in installing php's ssh extensions because those were not working after nearly 5 hours of effort. The phpseclib is working, and I think this because when I use require it does not die.

    However, when I try to start working with the ssh stuff, it throws a server error:

    $ssh = new Net_SSH1(myURL);
    

    The way that I usually SSH into my server is with a .pem file. Can I get some guidance on:

    1. Why the current code may be throwing an error?
    2. If this is possible.
    3. How would you write the connection code with the .pem file.