SSH内网穿透学习小计:在家轻松访问公司电脑中的虚拟机

今天在朋友的帮助下完成了公司电脑中的虚拟机通过SSH内网穿透——再到家里电脑登录的功能。以后在家也可以使用公司电脑中的虚拟机进行编译工作了。下面就把今天所接触的内容做一下笔记。
以前就知道虚拟机只有桥接物理机网卡后才可以在同一个网段的其他电脑使用SSH进行登录。而现在的需求是有通过外网访问到内网中某台电脑的虚拟机。到这里我想到了朋友之前写过的一篇博客文章链接,需求差不多。他是连接公司内网服务器,我是连接内网电脑虚拟机。都差不多。反正通过SSH穿透后不管你在那一级路由,都是可以正常访问的。
先说一下穿透前最重要的一个需求:有一个公网能访问的服务器(阿里、腾讯等云主机。或者是你的Linux路由器或者是内网服务器)只要能够通过互联网访问到这台设备就可以进行内网穿透。
原理就是:先用你想要做内网穿透的内网设备连接到你的这台公网服务器,然后请求这台公网服务器,你需要把他那个端口的所有请求转发给你那个端口。
老规矩,下面直接上代码。在你需要做内网穿透的设备上执行。

ssh -gfnNTR x.x.x.x:7001:y.y.y.y:22 root@z.z.z.z -o ServerAliveInterval=300

先别蒙圈,让我一一道来几个参数的含义。
x.x.x.x 可以是你公网服务器的IP,也可以是127.0.0.1、再或者简单粗暴localhost代替。
7001 表示你公网服务器暴露的端口,只要访问这个端口,都会转发给你的内网设备。
y.y.y.y是你需要做内网穿透设备的IP,也可以是127.0.0.1、再或者简单粗暴localhost代替。
22 内网服务器暴露的端口,所有访问公网暴露的端口都会转发到此处。
root 表示你的公网服务器中的root账户。
z.z.z.z是公网服务器的IP,这里要注意了:如果你的公网IP做了域名映射,可以直接是root@xxx.com。如果没有就直接是root@z.z.z.z。
说完这几个参数,下面就来实际应用吧。比如我现在台公网服务器,实际上是放在家里通过花生壳外网访问的。登录名为chengkni。网址为chengkni.xicp.net,由于是花生壳穿透的。端口是18648、没关系,只要通过公网访问到。现在我想要在家里通过访问这台服务器的7022端口登录到我公司电脑中的虚拟机。
Linux的默认SSH端口是22。那我们现在想在这台虚拟机中执行下边的代码(需要注意的是,因为是花生壳转发的。所以要在域名后边添加-p 18648):

ssh -gfnNTR localhost:7001:localhost:22 chengkni@chengkni.xicp.net -p 18648 -o ServerAliveInterval=300

这是会提示你输入密码,只要输入你的这台公网服务器的秘密即可完成内网穿透。
验证是否成功。自己在你的公网服务器里边输入
ssh 用户名@localhost -p 7001
这个用户名是你内网穿透设备的登录用户名。这段是在我公网服务器里边执行的。所以可以直接用localhost。
注意:这里有一点要强调的是在这台公网服务器是可以直接使用这个7001端口登录到内网服务器的。但是其他设备想通过这个7001端口登录到内网服务器还需要公网服务器做一个简单的配置。
修改公网设备的sshd_config文件,在最后边添加一行GatewayPorts yes即可。
路径/etc/ssh/sshd_config,修改完在执行一下下边的命令重启ssh服务。

service ssh restart

这里写图片描述
如果你是在putty等软件里边你就可以直接用ip或域名加端口了。既然你能看到这条博客说明你也是有Linux系统使用经验的。这里就不多做讲解了。
上边剩下几个参数讲解就直接帖朋友博客里边的内容了。再次附上朋友博客的链接以表感谢。文章链接

Note: x.x.x.x是我的ECS服务器公网IP  localhost是指ssh client自己的127.0.0.1 .
  -o ServerAliveInterval=300 的意思是让ssh client每300秒就给server发个心跳,以免链路被RST.
  -f Requests ssh to go to background just before command execution. 让该命令后台运行 .
  -n Redirects stdin from /dev/null (actually, prevents reading from stdin).
  -N Do not execute a remote command. 不执行远程命令 .
  -T Disable pseudo-tty allocation. 不占用 shell .
  -g Allows remote hosts to connect to local forwarded ports. 允许非本机地址(任何公网IP)连接x.x.x.x的2333端口.{see man sshd_config(5)}.
    这个选项非常重要, 要让这个选项生效需要在x.x.x.x服务器(ssh server)上编辑/etc/ssh/sshd_config 添加一行GatewayPorts yes 然后保存退出并 service ssh restart

至此本次学习笔记已经整理完毕。希望在与大家分享的同时让自己也可以加深记忆。和大家一起学习一起进步。


扫描下方二维码即可关注我的公众号,想要实时接收博文推送,拿出手机扫码关注公众号吧~

公众号二维码

微信扫码,即刻关注。
会不定期的更新相关内容哟 ^_^
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值