我正在尝试构建一个隧道,然后连接到Oracle DB,但是不能打开隧道。错误如下:
设置SSH转发器时出错:无法打开隧道本地主机:1521 <> XXXXXXXXX:1521可能在使用中或无法到达目的地。
sshtunnel.HandlerSSHTunnelForwarderError:打开隧道时出错。
我的代码被设置为:
self.tunnel = sshtunnel.SSHTunnelForwarder((conn_data['gateway'], int(conn_data['gateway_port'])),
ssh_username=conn_data['username'],
ssh_password=password,
remote_bind_address=(conn_data['remote_bind'],
int(conn_data['remote_port'])),
local_bind_address=(conn_data['local_bind'],
int(conn_data['local_port'])))如果我在我工作的公司的网络中,代码就能正常工作。但是如果我是通过VPN连接的,我就会得到上面的错误。我猜VPN是在同一个隧道上建立的。
我尝试更改local_port并移除本地绑定,但如果这样做,则会得到错误:
cx_Oracle.DatabaseError: ORA-12541: TNS:没有侦听器
那么,如何动态地设置SSHTunnelForwarder端口,以便它可以通过我已经设置的VPN访问我的数据库呢?
注意:更改VPN的配置或不使用它不是一个选项。
发布于 2020-03-23 18:58:15
问题解决了。问题是我的VPN使用与我相同的端口(这导致了第一个错误),而我的Oracle连接也指向这个端口(是什么导致了错误ORA-12541)。
要解决这个问题,我必须将conn_data'local_port'更改为另一个端口,并将oracle连接的端口设置为同一个端口:
self.tunnel = sshtunnel.SSHTunnelForwarder((conn_data['gateway'],
int(conn_data['gateway_port'])),
ssh_username=conn_data['username'],
ssh_password=password,
remote_bind_address=(conn_data['remote_bind'], int(conn_data['remote_port'])),
local_bind_address=(conn_data['local_bind'], 1234))
self.connection.connect(conn_data['host'],
port=1234,
username=conn_data['username'],
password=password,
look_for_keys=False)https://stackoverflow.com/questions/60778866
复制相似问题