我遇到了以下问题:我需要从一堆机器(比如说 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
将该端口上的所有本地流量转发到。选项会将该过程置于后台,但配置文件将打开此转发ssh
PH-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
您的浏览器应该呈现此页面。