通过代理访问SSH服务器

本文介绍如何让SSH通过代理连接远程服务器。

安装netcat

首先安装netcat,使用nc -h查看是否有-X参数,如果没有,那就需要安装其它版本的netctat。对于ArchLinux,默认使用的是gnu-netcat,需要换为openbsd-netcat:

pacman -S openbsd-netcat

如果nc -h仍然未显示-X参数,可使用which -a nc,在返回的nc全路径中选择一个再试。

示例

通过本地Socks5代理访问SSH:

ssh -o ProxyCommand='nc -X 5 -x localhost:10028 %h %p' myusername@ssh-server

通过本地Http代理访问SSH:

ssh -o ProxyCommand='nc -X connect -x localhost:18080 %h %p' myusername@ssh-server

关于-X参数值

nc帮助中说明可选值为4, 5 或 connect,分别表示使用Socks4, Socks5及默认的HTTP代理。

-X proto	Proxy protocol: "4", "5" (SOCKS) or "connect"

写入配置文件

每次都输入一长串命令连接SSH仍然很麻烦,在.ssh/confgi中写入如下配置后,可使用ssh myserver连接。这样做的另一个好处是通过rsync传输文件时,也同时会自动使用代理。

Host myserver 
    HostName  my-ssh-server-ip
    User myusername
    Port 12881
    ProxyCommand nc -X 5 -x localhost:10028 %h %p
Comment