Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库
Robot Framework: Connect to PostgreSQL Database via SSH Tunnel
我面临以下问题。
我在远程服务器上有一个 PostgreSQL 数据库。为了访问它,我需要通过 SSH 隧道。
所以,我的测试步骤是:
- 创建隧道
- 连接到数据库
- 执行查询/查询
我可以使用 SSHLibrary 创建隧道,而且它有效:
SSHLibrary.Open Connection 10.xxx.xxx.xx
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel 9191 ${IP_DATABASE} 22
所以我继续使用 DatabaseLibrary 执行连接(并且我检查了所有字段都是正确的):
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} ${IP_DATABASE} ${PORT_DB}
但我收到以下错误:
OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "10.xxx.xxx.xx" and accepting
TCP/IP connections on port 5432?
我该如何解决?我想我需要以某种方式指定数据库连接必须通过使用隧道来完成,但我不知道该怎么做。
这是完整的测试代码:
*** Settings ***
Library DatabaseLibrary
Library SSHLibrary
*** Variables ***
${IP_DATABASE} 10.xxx.xxx.xx
${PORT_DB} 5432
${DB_NAME} MyNameDB
${SCHEMA_DATABASE} MySchemaDB
${USER_DB} MyUserDB
${PASSWORD_DB} MyPasswordDB
*** Keywords ***
*** Test Cases ***
Connect To DB Via SSH
SSHLibrary.Open Connection 10.xxx.xxx.xx
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel 9191 ${IP_DATABASE} 22
Sleep 2s
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} ${IP_DATABASE} ${PORT_DB}
我想用射频来做,有人能帮忙吗?
非常感谢
Ssh 隧道的工作方式应该是您与另一台主机建立 SSH 连接并在本地主机中公开一个端口,然后将流量从本地主机中的该端口隧道传输到终点的 IP/PORT隧道..
所以,假设您在 192.168.100.10 有一台主机,您的机器人框架位于 运行 并且它需要连接到 192.168.50.100 中的数据库:
如果可以直接通过 ssh 访问 postgres:
Connect To DB Via SSH
${IP_DATABASE}= 192.168.50.100
${DB_PORT}= 5432
SSHLibrary.Open Connection ${IP_DATABASE}
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel ${DB_PORT} ${IP_DATABASE} ${DB_PORT}
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} 127.0.0.1 ${PORT_DB}
现在,如果您必须使用 ssh 跳转主机,例如,连接到一个 ssh 服务器,然后该服务器将连接到另一个服务器,其中 postgres 运行,您需要做的就是更改隧道 ip 地址流量将转发到的位置:
Connect To DB Via SSH
${IP_DATABASE}= 192.168.50.100
${IP_SSH_JUMPHOST}= 192.168.50.1
${DB_PORT}= 5432
SSHLibrary.Open Connection ${IP_JUMPHOST}
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel ${DB_PORT} ${IP_DATABASE} ${DB_PORT}
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} 127.0.0.1 ${PORT_DB}
我面临以下问题。 我在远程服务器上有一个 PostgreSQL 数据库。为了访问它,我需要通过 SSH 隧道。
所以,我的测试步骤是:
- 创建隧道
- 连接到数据库
- 执行查询/查询
我可以使用 SSHLibrary 创建隧道,而且它有效:
SSHLibrary.Open Connection 10.xxx.xxx.xx
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel 9191 ${IP_DATABASE} 22
所以我继续使用 DatabaseLibrary 执行连接(并且我检查了所有字段都是正确的):
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} ${IP_DATABASE} ${PORT_DB}
但我收到以下错误:
OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "10.xxx.xxx.xx" and accepting
TCP/IP connections on port 5432?
我该如何解决?我想我需要以某种方式指定数据库连接必须通过使用隧道来完成,但我不知道该怎么做。 这是完整的测试代码:
*** Settings ***
Library DatabaseLibrary
Library SSHLibrary
*** Variables ***
${IP_DATABASE} 10.xxx.xxx.xx
${PORT_DB} 5432
${DB_NAME} MyNameDB
${SCHEMA_DATABASE} MySchemaDB
${USER_DB} MyUserDB
${PASSWORD_DB} MyPasswordDB
*** Keywords ***
*** Test Cases ***
Connect To DB Via SSH
SSHLibrary.Open Connection 10.xxx.xxx.xx
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel 9191 ${IP_DATABASE} 22
Sleep 2s
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} ${IP_DATABASE} ${PORT_DB}
我想用射频来做,有人能帮忙吗? 非常感谢
Ssh 隧道的工作方式应该是您与另一台主机建立 SSH 连接并在本地主机中公开一个端口,然后将流量从本地主机中的该端口隧道传输到终点的 IP/PORT隧道..
所以,假设您在 192.168.100.10 有一台主机,您的机器人框架位于 运行 并且它需要连接到 192.168.50.100 中的数据库:
如果可以直接通过 ssh 访问 postgres:
Connect To DB Via SSH
${IP_DATABASE}= 192.168.50.100
${DB_PORT}= 5432
SSHLibrary.Open Connection ${IP_DATABASE}
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel ${DB_PORT} ${IP_DATABASE} ${DB_PORT}
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} 127.0.0.1 ${PORT_DB}
现在,如果您必须使用 ssh 跳转主机,例如,连接到一个 ssh 服务器,然后该服务器将连接到另一个服务器,其中 postgres 运行,您需要做的就是更改隧道 ip 地址流量将转发到的位置:
Connect To DB Via SSH
${IP_DATABASE}= 192.168.50.100
${IP_SSH_JUMPHOST}= 192.168.50.1
${DB_PORT}= 5432
SSHLibrary.Open Connection ${IP_JUMPHOST}
SSHLibrary.Login MySSH_User MySSH_Password delay=1
SSHLibrary.Create Local SSH Tunnel ${DB_PORT} ${IP_DATABASE} ${DB_PORT}
DatabaseLibrary.Connect To Database psycopg2 ${DB_NAME} ${USER_DB} ${PASSWORD_DB} 127.0.0.1 ${PORT_DB}