SSH搭建反向隧道
一、起因:最近因为疫情在上网课的时候,我同学linux系统碰到了问题,要我帮他看下。我原本是通过一个QQ远程桌面连过去,但是通过QQ桌面无法控制他虚拟机上的Linux。所以ssh过去是最好的方法,不过他的电脑跟我不在一个局域网,又是虚拟机,要怎么连过去呢?客户端(内网主机)通过ssh连接公网服务器(如阿里云服务器)时,称为正向隧道;公网服务器(例如阿里云服务器)通过ssh连接客户端(内...
一、起因:
最近因为疫情在上网课的时候,我同学linux系统碰到了问题,要我帮他看下。我原本是通过一个QQ远程桌面连过去,但是通过QQ桌面无法控制他虚拟机上的Linux。所以ssh
过去是最好的方法,不过他的电脑跟我不在一个局域网,又是虚拟机,要怎么连过去呢?
- 客户端(
内网主机
)通过ssh
连接公网服务器(如阿里云服务器)时,称为正向隧道
; - 公网服务器(例如阿里云服务器)通过ssh连接客户端(
内网主机
)时,称为反向隧道
。
二、搭建方法:
配置思路:在 A 机器(外网主机)上做到 B机器 (内网主机)的反向代理;在 B 机器上做正向代理本地端口转发。
1、首先我已经有了一个公网服务器,然后使用公网服务器,通过ssh
命令建立反向隧道。
2、在客户端(内网主机)
执行一条命令即可建立反向隧道:
ssh -NfR 5007:localhost:22 user@39.107.244.xxx
其中-N
表示不执行命令,只转发;-f
表示后台运行;-R
表示反向隧道;5007:localhost:22
表示监听服务器的5007端口,所有包转发到本地的22
端口;39.107.244.xxx
为公网服务器IP
然后会提示输入外网主机的密码
通过ssh的5007端口连接外网主机,就可以代理到内网主机,外网主机执行下面命令连接
ssh localhost -p 5007
三、改进:
到此为止,我们已经可以通过外网主机作为桥梁实现对内网主机的ssh访问,但是维持ssh的时间是有限的,一段时间没有数据传输,外网主机和内网主机的连接会断开。解决这个问题,可通过autossh
实现断开重连。使用autossh
之前,必须确保该客户端与服务器连接使用了无密码的密钥对登陆。
2、使用下面命令进行连接
autossh -M 5555 -NfR 5007:localhost:22 user@39.107.244.xx
其中-M 5555,
表示通过5555
端口监听连接状态,有问题就重连。
四、可能出现的错误:Permission denied, please try again.
问题原因:服务端SSH 服务默认配置禁止root用户登录策略。
解决方法:
1、通过 cat /etc/ssh/sshd_config 查看是否包含类似如下配置: #PermitRootLogin no
2、将#PermitRootLogin no 改为 PermitRootLogin yes
3、使用如下指令重启 SSH 服务: service sshd restart
解决了!
更多推荐
所有评论(0)