SSH隧道连接局域网下的虚拟机
连接局域网下的虚拟机,在网上找到的做法通常是:在VMware配置端口转发 最近了解隧道技术,突发奇想:能不能使用SSH隧道连接局域网下的虚拟机呢? 在网上找到的相关资料不多,经过自己摸索,终于实现了 使用SSH隧道连接局域网下的虚拟机,主要有两种方式可以实现 1: 本地端口转发; 2: 动态端口转发
首先,假设网络图如下,A和B在同一局域网下,我们的目的是: 实现 A 连接到 C 的SSH服务
方法一 : 本地端口转发
大体思路: 在A下创建
A --> C
的SSH隧道,就可以访问A下的指定端口,通过隧道转发,访问到C的22端口了 具体实现如下 :
1#B安装SSH服务
这是非常关键的一步(作为小白,我刚开始就异想天开,直接就想通过A连接到C,直到多次尝试失败并且想通了)
我的电脑 B 的系统是
windows10 1909
,自带了OpenSSH Server
软件;如果版本是wondows10 1809
以下或wondows7
的同学,可以网上搜索windows怎么安装openSSH
服务
(1) Win10打开 设置(Win + I
) ==> 应用 ==> 应用和功能 ==> 可选功能 => 添加功能 => OpenSSH服务器(点击安装)
(2) 打开 任务管理器(Shift + Ctrl + Esc
) ==> 任务 ==> 左下角点击"打开服务"; 找到两个OpenSSH服务,右键开启
(3) 打开 控制面板 ==> 系统和安全 ==> Windows Defender
防火墙 ==> 启用或关闭windows defender
防火墙;选择关闭防火墙; (或者在入站规则添加允许22端口)
到此, B已经配置完成
2#A建立 A --> C
的隧道
本人使用的是
PuTTY
的工具, 使用其他工具或PowerShell
也是可以的首先保证 C 关闭
iptables
或nftables
防火墙 (或配置允许22端口)通过"中间人" B ; 在 A 电脑上使用
PuTTY
建立起与 C 的SSH隧道 (本地端口转发)
在 A 上配置(基于文章开头假设的网络图) :
点击open,会出现登录,注意:这里登录的是 B 电脑,也就是要输入B的windows的用户名和密码;
到这里,你已经建立起
A --> C
的隧道了, 注意: 请不要关闭PuTTY
窗口, 否则隧道会被关闭
PuTTY
如上设置,相当于使用命令ssh -CfNg -L 127.0.0.1:6666:192.168.2.2:22 192.168.1.107
3#A通过隧道连接 C 电脑
- 终于到最后一步了, 很简单, 在 A 电脑开启新的
PuTTY
窗口, 请求 A 本地的 刚才自定义的 6666端口就可以啦
- 恭喜你, 成功通过SSH隧道连接到 C ;因为隧道是
A --> C
的且加密的, B 不会监听到流量
方法二 : 动态端口转发
大体思路: 在A下创建
A --> B
的SSH隧道,把 B 作为代理(Proxy), 就可以实现 : A 使用SOCKS5
协议通过 B 来访问到 C 的22端口 具体实现如下 :
1#B安装SSH服务
(在 方法一
中有具体实现, 略)
2#A建立 A --> B
的隧道
本人使用的是
PuTTY
的工具, 使用其他工具或PowerShell也是可以的在 A 电脑上使用
PuTTY
建立起与 B 的SSH隧道 (动态端口转发)
在 A 上配置(基于文章开头假设的网络图) :
点击open,会出现登录,注意:这里登录的是 B 电脑,也就是要输入B的windows的用户名和密码;
到这里,你已经建立起
A --> B
的隧道了, 注意: 请不要关闭PuTTY
窗口, 否则隧道会被关闭
PuTTY
如上设置,相当于使用命令ssh -CfNg -D 127.0.0.1:6666 192.168.1.107
3#A通过代理连接 C 电脑
- 终于到最后一步了, 很简单, 在 A 电脑上开启新的
PuTTY
窗口, 设置 A 本地的 刚才自定义的 6666端口为代理端口, 请求 C 就可以啦
方法三 : VMware配置端口转发
这是一个比较普遍的做法, 在网上也容易找到相关文章 大体思路: 在
VMware
上配置 监听父windows的端口X,把A端口转发到VMware下的虚拟机端口Y, 局域网的电脑只有访问windows的端口X就相当于访问虚拟机的端口Y啦, 是不是很容易 具体实现如下 :
1#B配置VMware
2#B配置防火墙
- 打开 控制面板 ==> 系统和安全 ==>
Windows Defender
防火墙 ==> 启用或关闭windows defender
防火墙;选择关闭防火墙; (或者在 入站规则 添加允许 上一步自定义的6666端口)
3#A通过 B 连接 C 电脑
- 终于到最后一步了, 很简单, 在 A 电脑直接用
PuTTY
请求 B 的 6666端口, 就可以登录 C 啦
… 以上