目录
1、问题描述
我的台式机通过不同的vpn管理两台虚拟机(A和B),虚拟机A、B之间不能互通,我想用ssh隧道,借助中间机(我的台式机)实现AB之间互通,相互拷贝文件。
2、环境信息
拨vpn后登录虚拟机A,看到如下信息:
Connecting to 10.202.1.126:7009...
Connection established.
To escape to local shell, press Ctrl+Alt+].
Last login: Tue Jul 11 11:15:54 2023 from 10.110.110.24
我们得知:
台式机IP(拨VPN后连接虚拟机A的IP):10.110.110.24
虚拟机A的IP和ssh端口:10.202.1.126:7009
很容易也可能得到虚拟机B的IP和ssh端口:192.168.40.10:22
3、解决思路
在台式机上建立一个到B的本地转发隧道,如使用端口9998连B的ssh端口22,这样A访问台式机的9998端口,就直连到B的ssh端口。
4、操作
4.1建立本地转发隧道
废话不说,上操作:
在台式机cmd命令行下输入以下ssh命令,建立到B的本地转发隧道。
ssh -f -N -L 10.110.110.24:9998:192.168.40.10:22 [email protected]
C:\Users\Administrator>ssh -f -N -L 10.110.110.24:9998:192.168.40.10:22 [email protected]
[email protected]'s password:
敲回车后,需要输入虚拟机B的登录密码进行隧道建立认证。
这时候可以看一下台式机的本地监听端口:
C:\Users\Administrator>netstat -an|findstr 9998
TCP 10.110.110.24:9998 0.0.0.0:0 LISTENING
4.2 使用隧道进行scp
在虚拟机A上如下操作:
[root@node1 tmp]# scp -P 9998 /tmp/999.txt [email protected]:/tmp
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:
999.txt 100% 4 0.7KB/s 00:00
[root@node1 tmp]#
说明:使用scp,拷贝文件/tmp/999.txt到台式机10.110.110.24:9998的/tmp目录下。
因为台式机做了隧道的本地转发,10.110.110.24:9998已经和虚拟机B 192.168.40.10:22形成了隧道,所以往10.110.110.24:9998拷贝,就直接到到了虚拟机B的ssh端口,这里根据提示,要输入虚拟机B的用户名密码进行认证。
5、验证
登陆虚拟机B,验证奇迹的时刻:
root@others tmp]# ip a |grep 192
inet 192.168.40.10/24 brd 192.168.40.255 scope global noprefixroute ens33
[root@others tmp]# ll /tmp/999.txt
-rw-r--r-- 1 root root 4 Jul 13 14:28 /tmp/999.txt
可以看到文件999.txt已经从之前不能互通的虚拟机A拷贝过来了。
6、提醒
建立隧道的时候,要指定台式机的IP:
ssh -f -N -L 10.110.110.24:9998:192.168.40.10:22 [email protected]
否则会变成这样:
ssh -f -N -L 9988:192.168.40.10:22 [email protected]
C:\Users\Administrator>netstat -an|findstr 9988
TCP 127.0.0.1:9988 0.0.0.0:0 LISTENING
TCP [::1]:9988 [::]:0 LISTENING
这样台式机的9988端口只在回环地址127.0.0.1监听,虚拟机A不能连上。
文中用到ssh隧道的知识,如果读者有疑问,可以留言一起探讨。