【问题标题】:SSH Tunneling with Python使用 Python 建立 SSH 隧道
【发布时间】:2020-09-14 20:43:30
【问题描述】:

我的目标是更新 Host3 埋藏如下: [Internet][Host1:HasInternet][Host2:Locked-by-VPN][Host3:No-Internet]

目前,我必须运行一系列 SSH 命令来首先建立从 Host1 到 Host2 到 Host3 的反向 SSH 连接,然后是动态隧道,然后按如下方式更新我的 Host3(见表格截图):

我想用 python 自动化这一系列的 SSH 隧道。我研究了 paramiko,一个 sshtunnels 库,但我不知道如何使用它们来实现我的目标。

非常感谢任何帮助。

【问题讨论】:

  • ssh -J <username>@Locked-By-VPN <username>@Has-No-Internet 有效吗?我认为您不需要手动管理所有这些隧道。
  • 哇,哇。从心底里感谢你。我没有意识到 -j 开关甚至是一件事。赞美全能的艾伦图灵。赞美吧。
  • 您可能还想检查 man ssh_config 中的 ProxyJump(用于从配置文件中指定相同的信息,而不是在命令行上),以及 ProxyCommand 以防您需要稍微更好地控制连接过程。

标签: python ssh ssh-tunnel


【解决方案1】:

与其手动管理隧道,不如让ssh 使用ProxyJump 选项为您完成,您可以在命令行上使用-J 访问该选项。

ssh -J <username>@Locked-By-VPN <username>@Has-No-Internet

这通过首先连接到Locked-By-VPN 来建立到Has-No-Internet 的连接。

您可以通过将以下内容添加到您的 ~/.ssh/config 文件中来缩写:

Host Host3
   Hostname
   User <username>
   ProxyJump <username>@Locked-By-VPN

然后你可以简单地运行ssh Host3; ssh 会从配置文件中获取真实的主机名、必要的用户名和中间主机。

还有一个ProxyCommand 选项可用于提供对连接过程的更多控制。有关这两个选项的更多详细信息,请参阅 man ssh_config

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2020-06-21
    • 2016-03-27
    • 1970-01-01
    • 2015-05-05
    • 2020-08-25
    • 2015-12-21
    • 2013-10-14
    相关资源
    最近更新 更多