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

问题描述 投票:0回答:1

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

错误|设置SSH转发器时出现问题:无法打开隧道localhost: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的配置或不使用它不是一种选择。

python oracle cx-oracle
1个回答
0
投票

问题已解决。问题是我的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)
© www.soinside.com 2019 - 2024. All rights reserved.