我不确定这个问题是最适合在 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]