正确使用SSHTunnel

2024-06-25 05:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用python2.7中的pymysqlsshtunnel来隧道连接,这样我就可以连接到只能通过bastion服务器访问的mysql实例。bastion服务器的主机名为BASTIONIP,该服务器可以毫无问题地连接到MYSQLHOST。然而,python似乎无法通过隧道进行连接。以下是我的代码:

    with sshtunnel.SSHTunnelForwarder(
            (BASTIONIP, 22),
            ssh_username='dataengineer',
            ssh_pkey="/Users/USERNAME/.ssh/id_rsa",
            remote_bind_address=(MYSQLHOST, 3306),
            local_bind_address=(MYSQLHOST, 3306)
    ) as tunnel:
        self.DB = {'con': pymysql.connect(host=MYSQLHOST,
                                          user=USERNAME,
                                          passwd=PASSWORD,
                                          db=DBNAME,
                                          port=tunnel.local_bind_port,
                                          charset='utf8',
                                          autocommit=True)}
        self.DB['cursor'] = self.DB['con'].cursor(pymysql.cursors.DictCursor)

但是,当我尝试连接时,我收到以下错误:

^{pr2}$

谁能指出我做错了什么吗?在


Tags: self服务器dbbindaddresslocalusernamessh
2条回答

很有魅力。在

In [1]: from sshtunnel import SSHTunnelForwarder
   ...:     ...: 
   ...:     ...: with SSHTunnelForwarder(
   ...:     ...:     ('xx.xx.xx.xx', 22),
   ...:     ...:     ssh_username='deploy',
   ...:     ...:     ssh_pkey='~/.ssh/id_rsa',
   ...:     ...:     remote_bind_address=('127.0.0.1', 3306),
   ...:     ...:     local_bind_address=('0.0.0.0', 3307)
   ...:     ...: ) as tunnel:
   ...:     ...:     print('pass')
   ...: 
   ...:     
pass

以下是我在谷歌上搜索后发现的可能原因:

  1. 不确定,这是由\u get_local_接口尝试解析本地主机名而失败(可能只是/etc/hosts文件或其他文件)引起的

尝试以根/etc/hosts文件的形式打开,并添加一行如下所示

# IP ADDR      HOSTNAME
192.168.1.1    your_desired_hostname

这个名字应该能解决。 用您的ip地址更新192.168.1.1Here

  1. 另一个解决方案: 替换:

local_if = socket.gethostbyname_ex(socket.gethostname())[-1]

^{pr2}$

Here

相关问题 更多 >