首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中动态设置ssh隧道?

如何在python中动态设置ssh隧道?
EN

Stack Overflow用户
提问于 2020-03-20 17:27:51
回答 1查看 1.4K关注 0票数 0

我正在尝试构建一个隧道,然后连接到Oracle DB,但是不能打开隧道。错误如下:

设置SSH转发器时出错:无法打开隧道本地主机:1521 <> XXXXXXXXX:1521可能在使用中或无法到达目的地。

sshtunnel.HandlerSSHTunnelForwarderError:打开隧道时出错。

我的代码被设置为:

代码语言:javascript
复制
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的配置或不使用它不是一个选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 18:58:15

问题解决了。问题是我的VPN使用与我相同的端口(这导致了第一个错误),而我的Oracle连接也指向这个端口(是什么导致了错误ORA-12541)。

要解决这个问题,我必须将conn_data'local_port'更改为另一个端口,并将oracle连接的端口设置为同一个端口:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60778866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档