使用sshtunnel/Paramiko通过跳板机连接时无密码密钥认证失败
问题:通过EC2跳板机本地连接远程SQL服务器失败
我需要用PyMySQL访问供应商AWS账户中的远程SQL服务器,该服务器通过中转网关与我司公有子网连通。已有一台EC2被加入白名单,远程网络也配置了允许访问的规则,在这台EC2上能正常执行ELT代码拉取数据。
现在尝试将该EC2作为跳板机,从本地机器连接远程SQL服务器,但遇到错误。参考@Martin Prikryl的提示后,初始化堡垒主机的代码如下:
from sshtunnel import SSHTunnelForwarder private_key_path = 'c:\\Users\\*****\\Documents\\****.pem' private_key = paramiko.RSAKey(filename=private_key_path) print("Before SSHTunnelForwarder") with SSHTunnelForwarder( 'bastion_host', ssh_username="ec2-user", ssh_pkey=private_key, remote_bind_address=('**.***.***.***', 22), ssh_private_key_password="") as bastion: print("Inside SSHTunnelForwarder") bastion.start()
终端输出错误信息:
2023-12-20 12:00:39,390| ERROR | Password is required for key C:\Users\****/.ssh\id_ed25519 Before SSHTunnelForwarder 2023-12-20 12:00:41,698| ERROR | Could not resolve IP address for bastion_host, aborting!
同时抛出异常:
--------------------------------------------------------------------------- BaseSSHTunnelForwarderError Traceback (most recent call last) Cell In[9], line 9 5 private_key = paramiko.RSAKey(filename=private_key_path) 7 print("Before SSHTunnelForwarder") ----> 9 with SSHTunnelForwarder( 10 'bastion_host', 11 ssh_username="ec2-user", ssh_pkey=private_key, 12 remote_bind_address=('**.***.***.***', 22), 13 ssh_private_key_password="") as bastion: 14 print("Inside SSHTunnelForwarder") 15 bastion.start() File c:\Users\USERNAME\pyenvironments\DataEng\Lib\site-packages\sshtunnel.py:1608, in SSHTunnelForwarder.__enter__(self) 1606 def __enter__(self): 1607 try: -> 1608 self.start() 1609 return self 1610 except KeyboardInterrupt: File c:\Users\USERNAME\pyenvironments\DataEng\Lib\site-packages\sshtunnel.py:1331, in SSHTunnelForwarder.start(self) 1329 self._create_tunnels() 1330 if not self.is_active: -> 1331 self._raise(BaseSSHTunnelForwarderError, 1332 reason='Could not establish session to SSH gateway') 1333 for _srv in self._server_list: 1334 thread = threading.Thread( 1335 target=self._serve_forever_wrapper, 1336 args=(_srv, ), 1337 name='Srv-{0}'.format(address_to_str(_srv.local_port)) 1338 ) File c:\Users\USERNAME\pyenvironments\DataEng\Lib\site-packages\sshtunnel.py:1174, in SSHTunnelForwarder._raise(self, exception, reason) 1172 def _raise(self, exception=BaseSSHTunnelForwarderError, reason=None): 1173 if self._raise_fwd_exc: -> 1174 raise exception(reason) 1175 else: 1176 self.logger.error(repr(exception(reason))) BaseSSHTunnelForwarderError: Could not establish session to SSH gateway
备注:
- 该密钥未设置密码
- 已尝试指定空密码
- 跳板机所在安全组允许我的IP进行SSH访问
- 可通过命令
ssh -i "***.pem" ec2-user@ec2-**-***-***-***.compute-1.amazonaws.com成功SSH连接跳板机
内容的提问来源于stack exchange,提问作者ejwx93
相关产品推荐
相关产品推荐

