本文介绍如何让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