PHP 使用 ssh2_tunnel 连接到 PostgreSQL
PHP Connect to PostgreSQL using ssh2_tunnel
在为该服务器创建 ssh2_tunnel 后,我正忙于尝试连接到 PostgreSQL 数据库(运行 在另一台服务器上)。
ssh2_tunnel 似乎工作正常,但我的 pg_connect 不工作,我希望我遗漏了一些小东西
<?php
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1);
echo "<span>test script<br /></span>";
$connection = ssh2_connect('xxx.xx.xx.xx', 22);
if (ssh2_auth_pubkey_file($connection, 'usname', './ssh_key.pub', './ssh_key', 'psword')) {
echo "<span>Public Key Authentication Successful<br /></span>";
} else {
die('Public Key Authentication Failed');
}
if ($tunnel = ssh2_tunnel($connection, '127.0.0.1', 5432)) {
echo "<span>Tunnel Successful<br /></span>";
} else {
die('Tunnel Failed');
};
// this is where it is failing and I'm not sure why
$string = "host=127.0.0.1 port=5432 dbname=dbname user=dbuser password=dbpass";
$pgsqlcon = pg_connect($string) or die('Could not connect: ' . pg_last_error());
?>
它给我以下错误
Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432?
来自 pg_last_error
的另一个错误
Warning: pg_last_error(): No PostgreSQL link opened yet in /home/shoepack/public_html/admin_php_ssh/notused.php on line 26
抱歉,这样不行。 ssh2_tunnel
创建一个远程文件指针,又名资源,用于 php 函数,如 fgets()
、fwrite()
等。它与 ssh 端口转发不同。
您可以尝试在 php 服务器上从 shell: ssh usname@xxx.xx.xx.xx -i ./ssh_key -L 5555:localhost:5432
打开 ssh 隧道。当会话处于活动状态时,您应该能够从 php 脚本以 pg_connect("host=127.0.0.1 port=5555 dbname=dbname user=dbuser password=dbpass");
连接到数据库
当然不能用于生产。生产需要的是允许从 php 应用程序服务器访问数据库。您可能需要编辑 postgresql.conf
以确保服务器绑定到正确的接口,并编辑 pg_hba.conf
以允许来自您的 php 主机的连接。
在为该服务器创建 ssh2_tunnel 后,我正忙于尝试连接到 PostgreSQL 数据库(运行 在另一台服务器上)。
ssh2_tunnel 似乎工作正常,但我的 pg_connect 不工作,我希望我遗漏了一些小东西
<?php
ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1);
echo "<span>test script<br /></span>";
$connection = ssh2_connect('xxx.xx.xx.xx', 22);
if (ssh2_auth_pubkey_file($connection, 'usname', './ssh_key.pub', './ssh_key', 'psword')) {
echo "<span>Public Key Authentication Successful<br /></span>";
} else {
die('Public Key Authentication Failed');
}
if ($tunnel = ssh2_tunnel($connection, '127.0.0.1', 5432)) {
echo "<span>Tunnel Successful<br /></span>";
} else {
die('Tunnel Failed');
};
// this is where it is failing and I'm not sure why
$string = "host=127.0.0.1 port=5432 dbname=dbname user=dbuser password=dbpass";
$pgsqlcon = pg_connect($string) or die('Could not connect: ' . pg_last_error());
?>
它给我以下错误
Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432?
来自 pg_last_error
的另一个错误Warning: pg_last_error(): No PostgreSQL link opened yet in /home/shoepack/public_html/admin_php_ssh/notused.php on line 26
抱歉,这样不行。 ssh2_tunnel
创建一个远程文件指针,又名资源,用于 php 函数,如 fgets()
、fwrite()
等。它与 ssh 端口转发不同。
您可以尝试在 php 服务器上从 shell: ssh usname@xxx.xx.xx.xx -i ./ssh_key -L 5555:localhost:5432
打开 ssh 隧道。当会话处于活动状态时,您应该能够从 php 脚本以 pg_connect("host=127.0.0.1 port=5555 dbname=dbname user=dbuser password=dbpass");
当然不能用于生产。生产需要的是允许从 php 应用程序服务器访问数据库。您可能需要编辑 postgresql.conf
以确保服务器绑定到正确的接口,并编辑 pg_hba.conf
以允许来自您的 php 主机的连接。