使用 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 的隧道的主要内容,如果未能解决你的问题,请参考以下文章
sshtunnel:我可以使用 CLI、DBeaver 或 Paramiko 访问 ssh 网关,但不能使用 sshtunnel