通过代理登录远程主机

12 min read

通过代理登录远程主机

ssh要使用代理登录远程主机,一般是因为远程主机是买的国外主机,然后ip被和谐了,所以要用通过代理来登录,代理一般都是ss啦。

用法一

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

用法二

ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1086 %h %p" [email protected]

用法三

不写-X,则默认使用SOCKS5协议:

ssh -o ProxyCommand="nc -x 127.0.0.1:1086 %h %p" [email protected]

解释:
-o:option,表示选项的意思;
ProxyCommand:ssh的一个选项,man ssh-o选项中可看到有ssh有哪些选项可使用,要进一步看选项具体含义,可用man ssh_config查看;
nc:netcat,net就是网络,cat就是“concatenate”(连接),就是连接网络的意思,这是一个工具,可以用man nc查看,windows下应该不存在这个命令,linux也需要安装,mac自带这个命令;
-X: (大写X)指定代理协议,有三种值:
4:SOCKS v4
5:SOCKS v5
connect:HTTPS
-x:(小写x)指定代理的主机地址和端口,我例子里写127.0.0.1:1086,是因为我用的ss,它有它的本地ip和端口,当然主机地址也可以填域名;
%h %p:变量,用于替换ssh真正要连接的服务器的主机名(host)和端口(port);
[email protected]:真正要连接的主机。

注意:-X-x都是nc命令的选项(可用man nc查看),而不是ProxyCommand命令的选项。

用法四

ProxyCommand的配置写在配置文件中,这样就不需要全部选项明着写了。

编写配置文件~/.ssh/config,注意,这个配置文件在客户端一般是不存在的,直接用vim新建保存即可。

vim ~/.ssh/config

配置文件内容:

Host *
    ProxyCommand nc -X 5 -x 127.0.0.1:1086 %h %p
*`号表示所有ssh连接的主机都通过指定的代理连接,当然你也可写成指定域名,或通配符域名,例如`*.test.com

使用了配置文件后,ssh直接像平时正常使用就可以,它会自动读取配置文件并使用代理去连接:

ssh [email protected]

**注意:**如果你是新建的~/.ssh/config文件,一定要把它的权限设置为600,否则会无法使用scp