【ssh-xorg】SSH远程配置X11窗口回传

前言

  • 我们通常在进行远程配置板端的时候往往会出现一个问题,在不连接显示屏或者启用VNC服务的前提下(或者使用其他软件提供的功能),我们无法在远程终端看到板端的新窗口,本文提供一种方式,在进行ssh远程连接时候制定参数-CX,进行窗口回传。
ssh -CX [用户名]@[客户端ip地址]
  • 可使用的几个场景:
    • OpenCV 窗口回传
    • rviz2 回传
    • VScode窗口回传(不会启用VScode-Server)
  • 需要注意通讯双方都需要支持x11转发,最好确保通讯双方都是Linux。
  • 下面我们来看看如何配置和使用场景说明。

1 ssh服务

请添加图片描述

1-1 介绍

SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录和其他安全网络服务。它为网络服务提供了一种安全传输环境,确保数据传输的安全性和完整性。以下是SSH服务的一些主要特点和使用场景:

主要特点
  • 加密通信:SSH通过使用公钥加密技术来保证数据传输过程中的安全性,防止数据在传输过程中被窃取或篡改。

  • 认证机制:SSH支持多种认证方式,包括密码认证、基于密钥的认证等,确保只有授权用户才能访问。

  • 数据完整性:SSH能够确保数据在传输过程中不被篡改,通过加密哈希函数来验证数据的完整性。

  • 隧道功能:SSH隧道可以用来安全地转发其他TCP/IP端口和X11会话,使得原本不安全的网络服务通过SSH加密通道传输。

  • 远程命令执行:用户可以通过SSH在远程服务器上执行命令,进行系统管理和维护。

使用场景
  • 远程登录:管理员可以通过SSH登录到远程服务器进行管理和维护工作。

  • 文件传输:SSH支持SFTP(SSH File Transfer Protocol)SCP(Secure Copy),用于安全的文件传输。

  • 端口转发:通过SSH端口转发(Port Forwarding),可以将不安全的网络服务(如数据库连接)通过加密通道传输。

  • 自动化管理:通过SSH,可以实现自动化脚本在多台服务器上的执行,简化系统管理任务。

  • 内网穿透:SSH可以作为内网穿透的工具,使得位于内网的服务可以被外网访问。

SSH服务的组成
  • SSH服务器:运行在远程主机上,负责监听端口,处理来自客户端的连接请求,并执行相应的操作。

  • SSH客户端:用于发起连接请求,用户通过客户端软件连接到SSH服务器。

  • SSH密钥:SSH密钥包括私钥公钥私钥保存在客户端,用于身份验证;公钥则可以放在服务器上,用于验证客户端的身份。

1-2 安装ssh
  • 安装
sudo apt install openssh-server
  • 启用ssh服务
sudo systemctl enable --now ssh
  • 查询ssh状态
sudo systemctl status ssh

请添加图片描述

  • 查询本地ip
ip addr

请添加图片描述

  • 远程连接,请务必确保主从机连接在同一局域网段下。
ssh [用户名]@[客户端ip地址]

请添加图片描述

  • 值得一提的是初次连接的时候可能会看到如下提示,这是向你确认客户端的SSH指纹。当我们第一次尝试连接到一个新的SSH服务器时,SSH客户端会显示服务器的公钥指纹,并询问我们是否信任这个服务器。这是为了防止中间人攻击。如果指纹匹配,输入yes继续连接。
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:nThX/AQW5bp9z3PueB3Wur5M1P+RlCTQr9IbNP0L+yc.
Are you sure you want to continue connecting (yes/no)?

2 -CX参数及X11转发

2-1 -CX
  • ssh 命令是用于安全地访问远程服务器的工具,而 -CX 参数是 ssh 命令行中使用的两个单独参数的组合。
  • -C 参数:这是 “Compression” 的缩写,用于启用压缩功能。启用压缩可以减少通过网络传输的数据量,这对于带宽有限的网络连接来说非常有用。压缩会增加CPU的使用,但是可以加快传输速度,尤其是在网络速度较慢的情况下。
ssh -C user@remotehost
  • -X 参数:这是 “X11 Forwarding” 的缩写,允许你将X11会话(即图形界面应用程序)从远程服务器转发到本地机器上。这意味着你可以在远程服务器上运行图形界面应用程序,并在本地机器上看到它们的窗口。
ssh -X user@remotehost
2-2 X11转发
  • X11 转发是一种允许用户在远程服务器上运行图形界面应用程序,并在本地机器上显示这些应用程序窗口的技术。这项技术对于需要在远程服务器上进行图形界面操作,但又不想使用远程桌面软件的用户来说非常有用。
  • 其中的概念:
    • X11:X11是X Window System的第11个版本,它是Unix和类Unix操作系统中使用的一个窗口系统,用于在图形界面下显示窗口和用户界面元素。
    • X11 转发:X11转发(也称为X11隧道)是一种通过SSH连接将X11客户端和服务器之间的通信隧道化的方法。这样,即使在远程服务器上运行的应用程序也能在本地机器的X11服务器上显示。
  • 当你在本地机器上运行一个SSH客户端,并通过SSH连接到远程服务器时,你可以使用以下步骤启用X11转发:
    1. 启动X11服务器:在本地机器上,确保X11服务器正在运行。在大多数Linux发行版中,当你登录到图形界面时,X11服务器会自动启动。
    2. 配置SSH客户端:通过SSH客户端连接到远程服务器时,使用 -X 参数(大写X)来启用X11转发。

3 使用示范

3-1 rviz2
  • 我们来尝试不制定-CX参数时候启用远程终端的rviz2服务请添加图片描述

  • 可以看到上述请求报错了,错误信息 “qt.qpa.xcb: could not connect to display” 表示 Qt 应用程序无法连接到显示服务器,通常是因为 DISPLAY 环境变量没有设置或者设置不正确。这个错误通常出现在尝试在没有图形界面的服务器上运行图形界面应用程序时,或者在远程 X11 转发没有正确配置的情况下。

  • 那我们远程连接的时候制定参数-CX请添加图片描述

  • 可以看到,我们的服务被正确启动了。


3-2 VScode(不推荐直接使用server连接)
  • vscode-server 是一个轻量级的服务器组件,它是 Visual Studio Code(VS Code)远程开发扩展的一部分。VS Code 是一个由微软开发的免费、开源的代码编辑器,它支持多种编程语言的语法高亮、智能代码完成、括号匹配、代码缩进、代码片段、代码对比差异、Git 控制等功能,并拥有一个功能丰富的扩展市场。

  • 正常我们使用ssh进行远程连接的时候都会借助ssh的扩展服务ssh-server请添加图片描述

  • 我们在扩展中连接请添加图片描述

  • 输入密码请添加图片描述

  • 初次远程需要安装vscode-server(万恶之源来了) 请添加图片描述请添加图片描述

  • 下载后发现我们就可以远程连接到远程的版端请添加图片描述

  • 然后我们来看一个奇特的现象:

  • 我们打开远程板端的htop,没安装过的可以通过下属命令安装

sudo snap install htop 
  • 我们新开一个ssh服务连接到板端,并输入htop,可以发现vscode-server占用了非常多的内存。请添加图片描述

  • 而且即使远程连接断开了,vscode-server仍占有运行内存,可以通过下述命令删除

rm -rf ~/.vscode-server
  • 利用htop查看内存是减少了请添加图片描述

  • 通过制定-CX参数启动VScode不会激活vs-server,也不会遗留残留内存占用。请添加图片描述

  • 但是可能会导致一点点CPU的占用… 请添加图片描述


3-3 OpenCV窗口连接
  • 我们简单写一个opencv代码验证一下,如果没安装的朋友可以装一下
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 创建文件
touch video.py
  • 把下属代码粘贴
import cv2cap = cv2.VideoCapture(0)while cap.isOpened():ret, frame = cap.read()if ret:cv2.imshow("frame", frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()
  • 写入

  • 请添加图片描述

  • 运行请添加图片描述

  • 同样道理运行-CX参数请添加图片描述


总结

  • 本文介绍了如何使用ssh的-CX参数进行X11窗口转发,可以进行OpenCV窗口转发,rviz2转发,VScode转发等等。
  • 如有错误,欢迎指出,感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440088.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】Doris 数据库与表操作语法实战详解

目录 一、前言 二、数据库基本操作 2.1 修改账户密码 2.2 创建新用户 2.3 创建数据库与账户授权 2.3.1 数据库创建补充说明 2.3.2 数据库账户赋权 三、数据表基本操作 3.1 Doris 数据表介绍与使用 3.1.1 建表结构说明 3.1.2 建表语法与操作 3.1.3 建表示例 - 单分区…

探索大型语言模型在文化常识方面的理解能力与局限性

介绍 论文地址:https://arxiv.org/pdf/2405.04655v1 近年来,大型语言模型(LLM)不仅被广泛应用于各个领域,而且通过大量的基准评估,证明它们能够理解人类所拥有的常识(Commonsense)…

pdf怎么编辑修改内容?详细介绍6款pdf编辑器功能

■ pdf怎么编辑修改内容? PDF(Portable Document Format)作为一种广泛使用的文件格式,具有特点包括兼容性强、易于传输、文件安全性高、跨平台性、可读性强、完整性、可搜索性、安全性、可压缩性。 PDF文件本身是不可以直接进行编…

深度学习--------------------------------门控循环单元GRU

目录 门候选隐状态隐状态门控循环单元GRU从零开始实现代码初始化模型参数定义隐藏状态的初始化函数定义门控循环单元模型训练该部分总代码简洁代码实现 做RNN的时候处理不了太长的序列,这是因为把整个序列信息全部放在隐藏状态里面,当时间很长的话&#…

jmeter操作数据库

jmeter操作数据库 一、打开数据库 二、jmeter下载驱动,安装jdbc驱动 1、下载好的驱动包 2、将驱动包复制粘贴 存放在包的路径下 (1)jdk下面 a、路径:jdk1\jre\lib b、jdk1\jre\lib\ext (2)jmeter下 a、…

SpringIoC容器的初识

一、SpringIoC容器的介绍 Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这…

基于依赖注入技术的.net core WebApi框架创建实例

依赖注入(Dependency Injection, DI)是一种软件设计模式,用于实现控制反转(Inversion of Control, IoC)。在ASP.NET Core中,依赖注入是内置的核心功能之一。它允许你将应用程序的组件解耦和配置&#xff0c…

Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)

往期文章:《Linux:深入了解冯诺依曼结构与操作系统》 Linux:深入理解冯诺依曼结构与操作系统-CSDN博客 目录 1. 概念 2. 描述进程 3. 深入理解进程的本质 4. 进程PID 4.1 指令获取PID 4.2 geipid函数获取PID 4.3 kill指令终止进程 …

Linux驱动开发(速记版)--GPIO子系统

第105章 GPIO 入门 105.1 GPIO 引脚分布 RK3568 有 5 组 GPIO:GPIO0 到 GPIO4。 每组 GPIO 又以 A0 到 A7,B0 到 B7,C0 到C7,D0 到 D7,作为区分的编号。 所以 RK3568 上的 GPIO 是不是应该有 5*4*8160 个呢&#xff1…

MySQL高阶2004-职员招聘人数

目录 题目 准备数据 分析数据 实现 题目 一家公司想雇佣新员工。公司的工资预算是 70000 美元。公司的招聘标准是: 雇佣最多的高级员工。在雇佣最多的高级员工后,使用剩余预算雇佣最多的初级员工。 编写一个SQL查询,查找根据上述标准雇…

男单新老对决:林诗栋VS马龙,巅峰之战

听闻了那场激动人心的新老对决,不禁让人热血沸腾。在这场乒乓球的巅峰之战中,林诗栋与马龙的对决无疑是一场视觉与技术的盛宴。 3:3的决胜局,两位选手的每一次挥拍都充满了策略与智慧,他们的每一次得分都让人心跳加速。 林诗栋&am…

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…

动态SLAM总结二

文章目录 Mapping the Static Parts of Dynamic Scenes from 3D LiDAR Point Clouds Exploiting Ground Segmentation:(2021)RF-LIO:(2022)RH-Map:(2023)Mapless Online …

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标&#x…

POLYGON Nature - Low Poly 3D Art by Synty 树木植物

一个低多边形资源包,包含可以添加到现有多边形风格游戏中的树木、植物、地形、岩石、道具和特效 FX 资源。 为 POLYGON 系列提供混合样式树这一新增功能。弥合 POLYGON 与更传统的层级资源之间的差距。还提供了一组经典的 POLYGON 风格的树木和植被以满足你的需求。 该包还附带…

系统安全 - Linux /Docker 安全模型及实践

文章目录 导图Linux安全Linux 安全模型用户层权限管理的细节多用户环境中的权限管理文件权限与目录权限 最小权限原则的应用Linux 系统中的认证、授权和审计机制认证机制授权机制审计机制 小结 内网安全Docker安全1. Docker 服务隔离机制Namespace 机制Capabilities 机制CGroup…

JavaWeb - 8 - 请求响应 分层解耦

请求响应 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中,MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数,表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

水下声呐数据集,带标注

水下声呐数据集,带标注 水下声呐数据集 数据集名称 水下声呐数据集 (Underwater Sonar Dataset) 数据集概述 本数据集是一个专门用于训练和评估水下目标检测与分类模型的数据集。数据集包含大量的水下声呐图像,每张图像都经过专业标注,标明…

vSAN05:vSAN延伸集群简介与创建、资源要求与计算、高级功能配置、维护、故障处理

目录 vSAN延伸集群延伸集群创建延伸集群的建议网络配置vSAN延伸集群的端口见证主机的资源要求vSAN延伸集群中见证节点带宽占用vSAN延伸集群的允许故障数vSAN延伸集群不同配置下的空间占用 vSAN延伸集群的HA配置vSAN延伸集群的DRS配置vSAN存储策略以及虚拟机/主机策略的互操作vS…