通过 SOCKS 代理进行 SSH?(客户端 = OpenSSH OS X)

通过 SOCKS 代理进行 SSH?(客户端 = OpenSSH OS X)

我不确定这个问题是最适合在 ServerFault 上还是在 SuperUser 上。从逻辑上考虑,我认为这是一个系统管理员问题,所以我把它放在这里,如果版主认为它应该移走,那么我为猜错了而道歉!

无论如何 - 我在异地有一台服务器,我被困在私有 IP 上,只能通过 HTTP 代理或 SOCKS 4/5 代理才能访问网络。我正在运行 OS X,我希望终端中的 ssh 命令能够以某种方式通过这两个代理之一到达远程服务器。远程服务器上的 SSH 端口是非标准的,但我怀疑这不会有太大区别。

答案1

我知道这是一篇古老的帖子,但我认为这个答案仍然有帮助:

您可以通过带有 NetCat (nc) 的 SOCKS 代理轻松完成此操作。在您的 ~/.ssh/config 中,只需添加两行,一行指定要代理的主机,另一行告诉它如何通过 nc 进行连接。如下所示:

〜/.ssh /配置:(已在 OSX 上测试,也应适用于 Linux)

Host 10.*
    ProxyCommand nc -X 5 -x PROXY_HOST:1080 %h %p

将“PROXY_HOST”替换为适合您的设置的正确内容。

这样 ssh 就不会直接打开与目标主机的 TCP 连接(在这种情况下,任何以“10.”开头的内容都可以是 IP 或主机名),而是运行带有指定选项的“nc”命令来实际建立 TCP 连接,然后 SSH 会完成剩下的工作。非常方便。

“5”是 SOCKS 版本,“1080”是代理端口,“%h”SSH 替换为您在命令行中输入的主机,“%p”SSH 替换为命令行中的端口(或默认值 22)。

答案2

是的,可以这样做。请参阅本网站举个例子。

基本上,您使用本地~/.ssh/config文件(或者/etc/ssh/ssh_config如果您需要它是系统范围的)为ProxyCommand您需要通过代理才能到达的主机指定指令。

您还可以使用nc(随 OS X 提供)来代替他们在该网站上提到的软件。

请参阅ssh_config(5)nc(1)手册页以获取更多信息。

答案3

有点晚了,但请注意,您可以在 SSH 命令本身中使用 -o 标志来使用此处的其他答案。这对我很有用,因为我可能需要或不需要使用代理(取决于我在哪个办公室),所以我真的不想编辑我的 ssh 配置文件。

ssh -o "ProxyCommand nc -X 5 -x myproxy:myproxyport %h %p" [email protected]

相关内容