SSH端口转发实现对非暴露端口的访问
背景
VSCode可以实现将服务器8888端口的web应用,转发到本地浏览器127.0.0.1:8888访问,而这个端口可能是不对公网暴露的。那这是怎么实现的呢?
用到的就是SSH隧道的端口转发,VSCode通过SSH实现了将本地127.0.0.1:8888的请求转发到服务器的8888端口。
基于这种思想,可以解决一直困扰我们的远程桌面连接,由于服务器的xrdp建立在3389端口,而该端口可能由于安全组的问题,一直没有在公网暴露,但我们是可以建立SSH连接的,所以就想到通过SSH转发,将3389端口转发到本地某端口,在本地用Microsoft Remote Desktop连接127.0.0.1:xxxx来实现连接建立。
应用
先启动ssh
ssh -L 8888:127.0.0.1:5901 -L 8889:127.0.0.1:3389 yinhuanghao@166.111.81.7
这个命令中,实现了两个端口映射:
将服务器的5901映射到了本地的8888(vncserver的端口)
将服务器的3389映射到了本地的8889(xrdp端口)
端口号取决于实际运行情况,在服务器上,我用vncserver作为xrdp的后端(也可以有别的用法,vncviewer可以直接连接vnc的桌面,xrdp也可以配置别的桌面作为后端)
这个ssh连接如果关闭了,端口映射就失效了
用本地软件连接
只要配置正确,连接还是容易的
PC name: 127.0.0.1:8889
User account: yourname的ssh密码
如果用vncviewer填vnc服务的密码,不过我设的和ssh密码一致
其他命令
vncserver --list
vncserver -kill :1
vncserver :1
sudo vim /etc/xrdp/xrdp.ini
sudo service xrdp restart
vncserver :1 -geometry 2880x1800
特性
- vncserver将图像信息传输给本机电脑,然后在本地进行图像渲染和显示,本地渲染的过程需要消耗很多资源,可能导致主机电脑的CPU和显卡工作负载增加;
- (推荐)xrdp则是在服务器端进行图像渲染,只将渲染后的图像传输给客户端进行显示,对于本地计算资源的消耗较小