使用mobaxterm和ssh远程转发来实现本地体现服务器图形

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

这篇博客主要是为了实现在本地体现一个只有cli的服务器中的图形,好比使用xclock
、python的matplotlib、gedit等等
使用景象

呆板:一台本地电脑以windows系统为例、一台远程服务器(ubuntu系统,但是只有cli界面)
需求:把服务器上的一些必要屏幕的图形界面体现在本地
MobaXterm 设置

下载MobaXterm
[img=80%,80%]https://i-blog.csdnimg.cn/direct/f8f9b251b96c421592d915ad91e51736.png#pic_center[/img]

进入软件
[img=80%,80%]https://i-blog.csdnimg.cn/direct/d6af70d5446746a8af4d51875d938307.png#pic_center[/img]

按顺序添加第一个服务器
[img=80%,80%]https://i-blog.csdnimg.cn/direct/b32c6810ae6b4594b7aeddd0cb7d386e.png#pic_center[/img]

从左侧的session进入服务器
其实截止到这里,已经可以在mobaxterm里体现一些图形了,好比在mobaxterm的下令行里输入xclock
,你的本机应该会体现一个钟表出来
不过思量到有人不喜欢用mobaxterm的界面,以是在这里将图形体现推广到一般的终端和vscode里
设置服务器转发

参考我的另一篇博客服务器远程转发
这一次将服务器的6010端口转发到本地的6000端口
这两个端标语比较有讲求
照旧远程转发:
  1. ssh -R 6010:localhost:6000 <user>@<server-ip>
复制代码
或者在~/.ssh/config里设置服务器ssh连接,并且在User、HostName的同级添加
RemoteForward 6010 localhost:6000

不过和上一篇文章中提到的一样,服务器端标语6010可以修改(假如被占用的话),但是,本机的接收端口6000是固定的,就算不是6000也是另一个常值,不能乱改,背面会提到
并且同样,保证有一个建立了远程转发的窗口开着,也就是保证端口转发不要断
现在你使用ssh连接或者vscode(remote-ssh插件)登上服务器,端口转发就已经建立成功了,接下来就是如何将图形体现在本地
本地体现服务器图形

ubuntu里有一个特别的变量DISPLAY

我这里还没有设置,体现为空,它是用来决定图形应用体现在哪个屏幕上的
格式一般为:
  1. DISPLAY=hostname:D.S
复制代码
hostname是负责体现的x-server所在的呆板
D是该x-server监听的端口,也就是图形应用应该把内容发送到目的呆板的哪个端口
S是屏幕的编号,一台呆板可以连接多个屏幕
更具体的解释可以看What is the $DISPLAY environment variable?
我们刚才已经把服务器的6010端口转发到了本地的6000端口
服务器图形的体现

在ubuntu上一个正常的体现流程应该是:
  1. 服务器上的图形process -> DISPLAY
复制代码
现在我们把ubuntu服务器的DISPLAY设置为:
  1. export DISPLAY=:10.0
复制代码

hostname不写其实就是localhost,必要注意的是,按照刚才的说法我们把DISPLAY指向了服务器的10号端口,看起来是如许,其着实现实操作的时候,DISPLAY访问的是用户输入的端标语加上6000,也就是我这里写的是10,现实上将来访问的是6010
那么ubuntu上的图形应用先访问DISPLAY发现指向6010端口,ok,那就把数据发往6010端口,没有转发的时候体现也就到此为止了,数据由服务器上监听6010端口的进程来处置处罚
转发后的服务器图形的体现

不过我们在之前做了转发,6010端口被ssh进程关注着,一旦有数据到达了服务器的6010端口,那么ssh就把它转发给我本机的6000端口来处置处罚,以是现在的体现流程为
  1. 服务器上的图形process -> DISPLAY
  2. -> ssh隧道 -> 本机端口6000 -> 本机进程
复制代码
各人可以猜猜我本机的6000端口是什么进程在监听,答案是MobaXterm的Xserver

按照我之前说的,看起来是在监听0号端口,现实上是监听6000号端口,注意,加6000的操作只有DISPLAY是如许的,其他环境该是什么数值就写什么数值,指的就是在做ssh转发的时候要写真实的值
这也就是为什么我之前说端口6000很特别,假如你的电脑MobaXterm这里体现的不是0.0而是a.b,那将来转发的时候请改成服务器端口6010(和服务器上的DISPLAY对应,也就是服务器的DISPLAY应该被设置为:10.0),本机端口6000+a
例子
  1. ssh -R 6010:localhost:6003 <user>@<server-ip> #如果mobaxterm显示:3.x的话
复制代码
或者修改~/.ssh/config中的RemoteForward
  1. RemoteForward 6010 localhost:6003 #如果mobaxterm显示:3.x的话
复制代码
最后,非常紧张的一点
要保证MobaXterm的Xserver是启动着的,也就是说你得保证MobaXterm一直开着,图形才会正常体现
现在测试一下吧,在服务器上测试:
  1. xclock
复制代码

效果:在我本机体现出来了

远程转发,你好强大!
补充

其实使用MobaXterm的下令行的时候,可能主动做了一次转发,并且把MobaXterm打开的bash的DISPLAY设置了一次

这里我没有做任何设置,打开就是:15.0,应该是只对当前bash有效,而没有写进~/.bashrc里,以是你用别的终端好比windows terminal连接服务器可能也是无法唤起xclock

上面在bash里举行export也是一样,只对那个bash有效
假如长期使用这两台电脑,不如就把export DISPLAY=...写进~/.bashrc里吧
一些好玩的功能

假如你的朋侪正好下载了MobaXterm,正好打开了MobaXterm并开启了Xserver,并且正好告诉了你他的公网ip,那么你可以把服务器端的设置改为,在他的电脑上体现吧
知道公网ip的话是不必要远程转发的,只必要设置ubuntu就好了:
  1. export DISPLAY=公网IP:0.0
复制代码

其实我这张图里下面一行就是本机有线网的ip,因为我是连着路由器,以是体现了内网ip(可以在路由器里做转发实现访问),假如这里体现的是公网ip,那也可以用这个公网ip访问

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表