windows10自带ssh实现远程内网主机

临近期末,实验课程较多,而且实验课实验室的机子少了一些环境需要的工具,每次上课再安装,安装次数多也麻烦,觉得有必要带上自己电脑,毕竟自己的机子操作起来更熟悉,但考虑频繁背机子也累,那当然想起使用远程工具,开始使用teamviewer这款远程工具,因为当这款远程工具远程主机时,对端主机也会显示相应界面。后来,经过网上一翻资料查阅,用使用windows远程工具可以解决teamviewer远程时候界面看到的场景。那么问题来了,宿舍的电脑是连着自己购买的无线路由器,相当于自己机子处在一个内网,这样是不能直接连接远程的。既然这样,那么我们使用路由器里面端口转发功能,把自己的机子远程端口(3389)转发到路由器的外网端口(3389),通过(查询)路由器获得的公网ip,最后直接连接这个公网ip成功连接上内网自己。但是这个公网ip是通过pppoe拨号自动分配,租期时间短或者拨号重连会重新分配一个新的ip。。。那么ssh工具出现了。

本文将教你如何通过 SSH 工具把内网主机服务映射到外网。

目的:

把本地主机3389端口映射到外网,让自己随时随地远程到自己机子。例如:把本地的远程服务监在127.0.0.1:3389,你有一台外网主机ip为45.77.22.xx,通过本文介绍方法,你将实现在互联网的机子连接上本地的机子。

具备条件:

为了实现内网机子映射到外网,以下资源为必须的:

1.一台有外网 IP 的服务器;
2.能在本地开发机上通过 ssh 登入到外网服务器。

满足条件:

对于条件1,学生优惠有腾讯云或者阿里云。
对于条件2,使用windows10自带ssh的客户端。(win+i快捷键出现windows设置,应用-管理可选功能,安装openssh客户端。)

实现原理:

为了实现内网端口映射到外网,我们这里使用SSH隧道。
隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

SSH有三种类型的端口转发:

本地端口转发:来自SSH客户端的连接通过SSH服务器转发,然后转发到目标服务器

远程端口转发:来自SSH服务器的连接通过SSH客户端转发,然后转发到目标服务器

动态端口转发:来自各种程序的连接通过SSH客户端转发,然后通过SSH服务器转发,最后转发到多个目标服务器

假如已经通过 SSH 隧道把本地机子和外网服务器连接在了一起,外网服务器端监听在 45.77.22.xx:3389,那么所有发给 45.77.22.xx:3389 的数据都会通过 SSH 隧道原封不动地传输给本地机子的127.0.0.1:3389,如图所示:

windows10自带ssh实现远程内网主机_第1张图片
所以,当访问45.77.22.xx:3389就会像访问自己机子127.0.0.1:3389一样。达到宿舍机子3389端口映射到外网服务器上的3389端口,从而完成外网远程访问内网主机。

实现步骤:

它的命令格式是:

ssh -R [local port]:[remote host]:[remote port] [SSH hostname]

实现SSH隧道,只需在本地机子执行:

ssh -R 3389:127.0.0.1:3389 [email protected]

这句话意思就是,在服务器(45.77.22.xx)上启动 3389 端口监听着,再把服务器(45.77.22.xx)上 3389 端口映射到本地的127.0.0.1:3389。

执行完以上命令,会提示登录入服务器,成功登录后,再次打开windows远程工具,输入45.77.22.xx连接,最后成功连上本地机子,从而实现实验室内网机子连接宿舍内网机子。

后台运行:

想让SSH连接一直连接,可以加上 -NTf 参数。

ssh -NTf -R 3389:127.0.0.1:3389 [email protected]

N参数:表示只连接远程主机,不打开远程shell;

T参数:表示不为这个连接分配TTY

f参数:表示SSH连接成功后,转入后台运行

执行完以上命令后登入服务器,它会挂在光标输入密码处。这时,相当于放入了后台,只要你不强制中断SSH连接情况下,它会一直运行。继续进行shell其他操作也不会影响。

如果你想关闭这个后台连接,你首先找到它的进程pid,执行:

tasklist | findstr ssh

你会发现如下:

ssh.exe                       9448 Console                    1      7,604 K

使用taskkill命令去杀掉进程,执行:

taskkill /F /pid 9448

参考文献:
IBM developerWorks: 实战 SSH 端口转发
ubuntu:OpenSSH PortForwarding
阮一峰:SSH原理与运用(二)
linux:ssh命令详解

你可能感兴趣的:(工具)