完成工作机到家里电脑上虚拟机的连接(ssh)
*惯,先上链接
烂泥:学习ssh之ssh隧道应用 -- 这篇文章帮助我理解反向隧道
man ssh -- 在虚拟机(或者服务器)上查看 ssh 命令行解释
那么我的网络结构如下图所示
家里的电脑是小写 a, 办公室的电脑是大写 A,两台电脑都在路由后面,IP都是192.168. 开头,而且家里的路由外端还不是外网IP,其网络结构我就没有进行深入调查了。
那么这种情况下如何用 A 的 SecureCRT 连接到 a 上的虚拟机kivy呢?
我的实战环境如下
A: WIN7 (办公室)
a: WIN10 (家里)
a.kivy: UBUNTU17.04 (a上面的虚拟机,后面直接引为 a.kivy )
解决思路:
1. 首先建立服务器 S0 到 家里电脑 a 的 SSH反向隧道。
2. 家里电脑 a 转发端口到虚拟机
3. 利用 B 通过服务器连接回 a.kivy 虚拟机
1. 建立 S0 到 a 的反向隧道
首先来看看反向通道是干什么的:
当 a 能够正常连接到服务器 S0 上时, a -> S0 这条路是直接可连的,但是 S0 -> a 中间隔着路由器的NAT转换,所以无法直接通过简单的指定 IP:PORT 这种方式来连接的。SSH反向通道利用 a->S0 已经建立好的连接,打通 S0 -> a 的逆向通道(称为反向隧道),使得任何能够连接到服务器 S0 的机器均可以连接到 a。
那么文章开头连接中提供了linux命令行方式和windows Putty的连接,这里我提供一个 SecureCRT 的连接方式
如此,完成了服务器到家里电脑的反向隧道,连接状况如下
如何确定反向隧道建立成功了呢? netstat / lsof 都可以,以 lsof 为例
查询到 localhost:22555 端口正在监听sshd即可
2. 家里电脑 a 转发端口到虚拟机
虚拟机采用 virtualbox 配置,添加一个端口映射即可
连接状态如下
3. 利用 B 通过服务器连接回 a.kivy 虚拟机
前面两跳完成后,查阅 ssh 使用,可以直接完成连接
在B上用 git-bash 直接连接(使用 -J 指定服务器 S0 的一跳,分别需要输入服务器密码和虚拟机密码)
ssh -J aaa@qq.com:17023 -p 22555 aaa@qq.com
或者在用 SecureCRT 连接到服务器 S0 的情况下,直接连接即可
ssh -p 22555 aaa@qq.com
搞定后,连接状态如下,完成连接工作
本文实现的前提 : 已经完成了服务器的搭建,且 A 和 a 均可以正常连接到服务器,可以在 a 上使用 SecureCRT 正常连接到 a.kivy 虚拟机