大家都只知道 ssh 可以基于密码或密钥登录远程主机使用,但是你知道吗?其实 ssh 还可以在运用在公网服务器连接私有ip虚拟机,还可以实现命令行 ssh 代理。
<a target="_blank"></a>
试验环境为两台 centos 系统:
一台为公网服务器 rabbit :45.xxx.xxx.212

一台为 virtualbox nat 模式下的 centos 虚拟机 centosa:10.0.2.15
nat 普遍使用在有多台主机但只通过一个公有 ip 地址访问因特网的私有网络中,它允许了多台主机共享一个公用 ip 地址(即虚拟机的所有数据包最后都由网络中那台有公网 ip 地址主机转发出互联网)。
首先在 nat 后面的虚拟机内建立端口转发,通过如下命令:
<code>ssh -gfn -r <公网映射端口>:127.0.0.1:<本地端口> <目标公网></code>
命令中“ssh”参数介绍:
-g:允许远程主机连接到本地建立的转发端口
-fn:不登录不执行脚本或命令(经常连用)
-c:压缩数据传输(小带宽可用)
-r:程序级端口转发 ,“port:host:hostport”方法(必须使用)
在我们的例子中,命令如下(处于安全的原因,隐藏了远端公网地址):
<code># ssh -gfn -r 1111:127.0.0.1:22 45.xxx.xxx.212</code>
接着,从公网服务器 45.xxx.xxx.212 上连接 nat 后面的虚拟机,输入命令:
<code>ssh -p 1111 localhost</code>
以上从公网服务器连接到虚拟机私有 ip 实验结束,下面是运用 ssh 建立 proxy 代理。
代理proxy,也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。
图解:左边和右边的电脑在通讯时候,需要经过中间的电脑中转,而中间的那部电脑就是代理服务器。
简单的说就是 a 要访问 c,即便可以直接访问 c,但是有俩个问题:一个是安全的问题,另外还有就是“过滤问题”。
于是我们有了“代理”就是让我们 a 连接 b,由 b 去访问 c,b 最后“加密”传送给用户,最后用户就得到了想要的来自 c 的信息。
本机输入如下命令实现 ssh 代理:
<code> ssh -nnt <user>@<ip> -d <port></code>
参数介绍:
-n:后台运行
-n:不执行远程指令
-t:不分配 tty ,只做代理用
-d:指定代理端口
上述命令的意思是,在本地监听端口 1111,将访问到该端口的流量转发到远程服务器,远程服务器的用户凭证由命令行指定。
至此,ssh 代理设置已经完成了。后面要用代理工具完成 ssh 代理。
这里我们通过了代理设置,我们的浏览器和“阿里云”服务器连接完成~这样我们就可以代理上网、加速上网。甚至还可以科学上网!
第一节希望让大家灵活运用 ssh,ssh 的功能不仅仅只是简单的远程连接部署。通过 ssh 设置,可以让任何一台机器通过 ssh 相连接的!第二篇的意义在于享受远程任何一台机器同时,还可以明白,能完成互连的 ssh。当然也可以完成代理~!
原文发布时间为:2016-06-18
本文来自云栖社区合作伙伴“linux中国”