Python 正确使用SSHTunnel
我试图在python2.7中使用Python 正确使用SSHTunnel,python,ssh-tunnel,pymysql,Python,Ssh Tunnel,Pymysql,我试图在python2.7中使用pymysql和sshtunnel来隧道我的连接,这样我就可以连接到只能通过bastion服务器访问的mysql实例。bastion服务器的主机名为BASTIONIP,该服务器可以毫无问题地连接到MYSQLHOST。然而,python似乎无法通过隧道进行连接。下面是我的代码: with sshtunnel.SSHTunnelForwarder( (BASTIONIP, 22), ssh_username='d
pymysql
和sshtunnel
来隧道我的连接,这样我就可以连接到只能通过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)
但是,当我尝试连接时,出现以下错误:
File "/Library/Python/2.7/site-packages/sshtunnel.py", line 1378, in _get_local_interfaces
local_if = socket.gethostbyname_ex(socket.gethostname())[-1]
gaierror: [Errno 8] nodename nor servname provided, or not known
有人能指出我做错了什么吗?在谷歌搜索之后,我可以找出以下可能的原因:
/etc/hosts
文件的形式打开,并添加一行,如下所示
# IP ADDR HOSTNAME
192.168.1.1 your_desired_hostname
名称应该是解析的。
使用您的ip地址更新192.168.1.1
。
local\u if=socket.gethostbyname\u ex(socket.gethostname())[-1]
与
在谷歌搜索之后,我可以找出以下可能的原因:
/etc/hosts
文件的形式打开,并添加一行,如下所示
# IP ADDR HOSTNAME
192.168.1.1 your_desired_hostname
名称应该是解析的。
使用您的ip地址更新192.168.1.1
。
local\u if=socket.gethostbyname\u ex(socket.gethostname())[-1]
与
就像一个符咒
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
工作起来很有魅力
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
local\u bind\u address
在您的计算机上而不是mysql服务器上,请尝试将其设置为localhost:local\u bind\u address=('localhost',3306)
或local\u bind\u address=('127.0.0.1',3306)
当我尝试将local bind\u address
更改为localhost
时,也会出现相同的错误,127.0.0.1
或0.0.0.0
。请注意,这是在运行于0.0.0:8080local\u bind\u address
上的django应用程序中运行的,而不是在mysql服务器上,请尝试将其设置为localhost:local\u bind\u address=('localhost',3306)
或local\u bind\u address=('127.0.1',3306)
当我尝试将本地绑定地址
更改为localhost
、127.0.0.1
或0.0.0
时,我遇到了相同的错误。请注意,这是在运行于0.0.0.0:8080