Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库
Posted
技术标签:
【中文标题】Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库【英文标题】:Robot Framework: Connect to PostgreSQL Database via SSH Tunnel 【发布时间】:2021-12-02 21:54:42 【问题描述】:我面临以下问题。 我在远程服务器上有一个 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
我想用射频来做,有人可以帮忙吗? 非常感谢
【问题讨论】:
【参考方案1】:Ssh 隧道应该以这样一种方式工作,即您建立与另一台主机的 SSH 连接并在 localhost 中公开一个 PORT,然后将流量从 localhost 中的该端口隧道传输到隧道端点的 IP/PORT ..
因此,假设您在 192.168.100.10 有一个主机,您的机器人框架正在其中运行,它需要连接到 192.168.50.100 中的数据库:
如果 postgres 可以通过 ssh 直接访问:
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
【讨论】:
感谢它真的很有帮助,现在它可以工作了!真的很赞!周末愉快!以上是关于Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Robot Framework 测试用例的命令行参数中传递 Tab?