使用 python sshtunnel 的隧道

Posted

技术标签:

【中文标题】使用 python sshtunnel 的隧道【英文标题】:Tunnel using python sshtunnel 【发布时间】:2019-02-08 09:01:40 【问题描述】:

我正在尝试复制命令

ssh -L8080:127.0.0.1:80 example.com

ssh -R8080:127.0.0.1:80 example.com 

使用 python 库sshtunnel (https://github.com/pahaz/sshtunnel/)。

所以我想出了相当于

ssh -L8080:127.0.0.1:80 example.com

成为

server = SSHTunnelForwarder(
'example.com',
ssh_username="username",
ssh_password="password",
remote_bind_address=('127.0.0.1', 8080))

但我仍然无法理解如何复制命令

ssh -R8080:127.0.0.1:80 example.com 

【问题讨论】:

欢迎来到 SO。你能在你的问题中添加一些细节吗?出了什么问题?请在此处发布您的错误消息或日志文件条目。谢谢。 谢谢,我已经添加了更多细节 【参考方案1】:

为什么不使用 subprocess 并在 shell 中运行命令?

for example:

import subprocess
p = subprocess.Popen(["YOUR_COMMAND"], shell=True, stdout=subprocess.PIPE)
p.communicate()

这是一个建议,如果只运行命令或者你需要做额外的操作,也取决于你需要做什么!

【讨论】:

这不是 OP 要求的,这个问题非常具体地与模块有关【参考方案2】:

在我看来,您可能混淆了远程端口和本地端口。

尝试类似:

server = SSHTunnelForwarder(
'example.com',
ssh_username="username",
ssh_password="password",
local_bind_address=('', 8080),
remote_bind_address=('127.0.0.1', 80))

如果您想将远程 80 端口共享给所有接口。

或者使用它可能更好:

server = SSHTunnelForwarder(
'example.com',
ssh_username="username",
ssh_password="password",
local_bind_address=('127.0.0.1', 8080),
remote_bind_address=('127.0.0.1', 80))

只为本地界面共享。

【讨论】:

以上是关于使用 python sshtunnel 的隧道的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 打开 SSH 隧道?

sshtunnel:我可以使用 CLI、DBeaver 或 Paramiko 访问 ssh 网关,但不能使用 sshtunnel

python sshtunnel 简单介绍

Python通过SSH隧道链接Kafka

使用 sshtunnel 包进行两步 SSH 本地端口转发

停止 SSHTunnel 服务器时,应用程序挂起