繁体   English   中英

Robot Framework:通过SSH隧道连接PostgreSQL数据库

[英]Robot Framework: Connect to PostgreSQL Database via SSH Tunnel

我面临以下问题。 我在远程服务器上有一个 PostgreSQL 数据库。 为了访问它,我需要通过 SSH 隧道。

所以,我的测试步骤是:

  1. 创建隧道
  2. 连接到数据库
  3. 执行查询/查询

我可以使用 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 连接,并在 localhost 中公开一个 PORT,然后将流量从 localhost 中的该端口隧道传输到隧道端点中的 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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM