ssh隧道穿越内网访问局域网内主机

最近,由于新冠肺炎影响,我们都在家办公。但是,小伙伴需要本地电脑访问我家里局域网内的数据服务器,刚开始我们使用了teamviewer,但感觉不是很安全,于是我们研究了下通过ssh隧道穿越来进行访问。

如下图所示,我们的需求是本地主机192.168.1.100能通过ssh远程登录另一个局域网下的目标主机192.168.3.87,为了达到这个目标,我们需要一个拥有公网ip的代理服务器47.55.38.19,来做ssh的端口转发。

image.png

下面,我们分别对代理服务器、目标主机和本地主机进行配置。

一、配置代理服务器

1、开放端口

代理服务器我用的是阿里云服务器,后面我会用到端口10022进行转发,所以需要在阿里云上开放这个端口,进入安全组,添加一条访问规则,如下所示:

image-20200512221252191.png

2、修改ssh配置文件

编辑/etc/ssh/sshd_config文件

$ vim /etc/ssh/sshd_config

在sshd_config中添加一条配置,打开转发功能,如下:

GatewayPorts yes

wq保存好以后,重启ssh

service ssh reload

二、配置目标主机

非常简单,执行下面命令就行了

$ ssh -T -f -N -g -R :10022:127.0.0.1:22 [email protected]

这条命令的作用是:

  1. 建立一条ssh连接,目标主机192.168.3.87连接上代理服务器47.55.38.19
  2. 如果有其他ssh客户端连接到代理服务器47.55.38.19的10022端口上时,则代理服务器会将这条连接转发到目标主机192.168.3.87上

在目标主机192.168.3.87上通过下面命令查看是否建立连接:

$ ps -ef | grep ssh
root    3050     1  0 13:47 ?        00:00:01 ssh -T -f -N -g -R :10022:127.0.0.1:22 [email protected]

三、本地主机连接目标主机

当代理服务器和目标主机配置好以后,我们就可以使用本地主机192.168.1.100连接目标主机了,命令如下:

# 通过test用户登录到目标主机
$ ssh -p 10022 [email protected]

需要注意的是:test是目标主机192.168.3.87的用户,而不是代理服务器的用户,代理服务器只是做了一个ssh转发。所以,我们登录时的密码或者无密码登录,都与目标主机配套的。

遇到问题

1、登录时超时了,没任何反应

这是因为我刚开始配置时,没有在阿里云上开启10022端口。

2、ssh: connect to host 47.55.38.19 port 10022: Connection refused

这是因为我们没配置好ssh,编辑/etc/ssh/sshd_config文件,将GatewayPorts设置为yes,并且重启ssh

service ssh reload

然后在目标机192.168.1.100上,关闭以前的转发,重新开启新的。

$ ps -ef | grep ssh
rooot    3050     1  0 13:47 ?        00:00:01 ssh -T -f -N -g -R :10022:127.0.0.1:22 [email protected]

# 关闭以前连接
$ kill -9 3050

# 开启新的连接
$ ssh -T -f -N -g -R :10022:127.0.0.1:22 [email protected]

ssh转发命令知识点

命令如下:

$ ssh -T -f -N -g -R :10022:127.0.0.1:22 [email protected]

各个选项参数作用如下:

  • -T 不分配伪终端;
  • -f 使 ssh 进程在用户输入密码之后转入后台运行;
  • -N 不执行远程指令,即代理服务器不需执行指令,只作端口转发;
  • -g 允许代理服务器连接到本地转发端口;
  • -R 将代理服务器指定端口上的连接转发到本机端口;
  • [email protected]
    表示使用代理服务器47.55.38.19的用户root 来连接;
  • :10022:127.0.0.1:22
    表示本机回环接口(127.0.0.1,也可使用本机其他网络接口的地址,比如以太网 IP 或 WiFi IP)的 22 端口连接到远程主机的 10022 接口,因远程主机 10022 绑定的地址为空,所以远程主机会监听其所有网络接口的 10022 端口。

参考:

利用SSH隧道技术穿越内网访问远程设备

SSH隧道技术----端口转发

你可能感兴趣的:(ssh隧道穿越内网访问局域网内主机)