如何实现跨不同主机的 ssh 隧道自动化?

如何实现跨不同主机的 ssh 隧道自动化?

我遇到了以下问题:我需要从一堆机器(比如说 PC-01、PC-02......、PC-XX)访问本地网络服务器,而我只能通过 ssh 桥(PC-SSH)访问这些机器。

我通过在 sshconfig 文件上添加一条规则解决了连接到各种机器的 ssh 问题:

Host PC-*  
    IdentityFile ~/.ssh/id_rsa  
    User username  
    ProxyJump PC-SSH

有了它,我就可以ssh PC-X不用任何(手动)跳转。
目前,要访问 PC-XX 上的页面,我需要执行ssh -L port:PC-XX:port PC-SSH,但我需要手动对每个 PC-XX 和每个端口执行此操作。

我想要的是能够简单地转到浏览器并转到某个 URL PC-05:4040,然后通过此端口访问此机器上的页面。这可能吗?

感谢大家的关注!

答案1

一种方法是使用代理自动配置(聚合氯化铝) 文件和 SOCKS 代理。然后,您将在文件中设置转发~/.ssh/config,以将某个本地端口上的所有请求通过 SOCKS 隧道转发到远程计算机,并让 PAC 文件通过该隧道路由与主机名匹配的请求。

例如,包含以下内容的 PAC 文件:

function FindProxyForURL(url, host) {

  alert("url" + url);

  if (shExpMatch(url,"*myhostname*")) {
    alert("Using special tunnel");
    return "SOCKS5 127.0.0.1:9999";
  }

  // All other requests go directly to the WWW:
  return "DIRECT";

}

加上~/.ssh/config文件中的一个条目,例如:

Host PH-*
     IdentityFile ~/.ssh/id_rsa  
     User username  
     ProxyJump PC-SSH
     DynamicForward 9999

执行时ssh -Nf PH-05将打开本地端口,并通过隧道9999将该端口上的所有本地流量转发到。选项会将该过程置于后台,但配置文件将打开此转发sshPH-05-Nf任何 ssh连接到PH-*,因此您可能更愿意为隧道创建一个特定的别名,例如 ,PH-05-tunnel并且只包含DynamicForward。或者,如果PH-SSH可以访问PH-05:4040,那么您可以只创建一个PH-SSH-tunnel规则,并将主机名设置为PH-SSH,从而删除ProxyJump部分。

然后,根据您的设置(firefox浏览器中的代理设置,chrome/chromium使用系统代理设置),您告诉您的代理管理器使用 PAC 文件,然后您可以将您的浏览器指向例如,PH-05:4040您的浏览器应该呈现此页面。

相关内容