AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 506488
Accepted
Tim
Tim
Asked: 2019-03-16 04:02:35 +0800 CST2019-03-16 04:02:35 +0800 CST 2019-03-16 04:02:35 +0800 CST

如何在 `ssh -X` 之后找到`$DISPLAY` 上的映射?

  • 772

在机器B上,我远程访问机器C

$ ssh -X t@C
$ echo $DISPLAY
localhost:10.0

如何找到/验证$DISPLAYC 上到$DISPLAYB 上的映射?可以通过C上的以下命令完成吗?

$ netstat -a | grep 6010
tcp        0      0 localhost:6010          0.0.0.0:*               LISTEN     
tcp6       0      0 ip6-localhost:6010      [::]:*                  LISTEN 

既然已经创建了 X 转发通道,为什么$DISPLAYC 和 B LISTEN之间的连接没有建立?$DISPLAY

当我在 C 上运行 X 客户端时,如何验证它是否连接到 B(本地机器)上的 X 服务器?为什么我在下面得到的关于端口 6010 的信息比运行 X 客户端之前更多?

$ eog &
[1] 1129
$ netstat -a | grep 6010
tcp        0      0 localhost:6010          0.0.0.0:*               LISTEN     
tcp        0      0 localhost:59782         localhost:6010          TIME_WAIT  
tcp        0      0 localhost:59780         localhost:6010          ESTABLISHED
tcp        0      0 localhost:59778         localhost:6010          TIME_WAIT  
tcp        0      0 localhost:6010          localhost:59780         ESTABLISHED
tcp6       0      0 ip6-localhost:6010      [::]:*                  LISTEN

谢谢。

ssh netstat
  • 2 2 个回答
  • 417 Views

2 个回答

  • Voted
  1. Best Answer
    炸鱼薯条德里克
    2019-03-16T05:32:20+08:002019-03-16T05:32:20+08:00

    “C 上的 $DISPLAY 到 B 上的 $DISPLAY 的映射”是什么意思?

    显然你grep在 C 上没有什么东西,所以你只能在 C 上看到涉及“端口号 = 6010”的套接字。C 上的其他连接或侦听套接字已断开grep。

    您之前没有看到任何连接,因为没有任何 X 客户端正在运行并连接到 sshd(端口号=6010),之后还有更多信息,因为您现在运行了一个已连接到您的 sshd(端口号)的 X 客户端=6010)。

    使用 SSH 隧道时,您必须了解网络拓扑。C 上的 SSH 服务器打开一个新的套接字,该套接字侦听端口 6010,因为 B 上的 SSH 客户端要求它。在 B 上的 SSH 客户端和 C 上的 SSH 服务器之间仍然建立 ssh 隧道(端口号 = 22,如果 sshd 不是特殊配置),你看不到这个隧道连接,因为你grep出去了。C 上的 X 客户端连接到 sshd(端口号=6010),然后 sshd 使用 ssh 隧道复用这些连接,并将这些连接转发到 B 上的 X 服务器。

    “C 上的 $DISPLAY 和 B 上的 $DISPLAY 之间的连接”实际上并不存在,ssh 隧道是在 C:22 和 address_of_the_SSH_client_on_B 之间创建的。而且由于它是一个连接,因此在 LISTENING 状态下是不可能的。

    使用netstat -ap无需grep查看更多信息。

    我们在这个答案中提到的所有连接都意味着真正的 TCP 连接,从内核的角度来看,而不是从最终用户的角度来看的“连接”。

    • 1
  2. mosvy
    2019-03-16T07:02:45+08:002019-03-16T07:02:45+08:00

    既然已经创建了 X 转发通道,为什么 C 上的 $DISPLAY 和 B LISTEN 上的 $DISPLAY 之间的连接没有建立?

    X 转发通道尚未创建。它仅在客户端连接到6010您的C(远程)机器上的端口时创建。该连接将通过ssh 连接作为单独的通道转发(而不是通过C和之间的不同 tcp 连接B)。要显示通过 ssh 连接转发的所有通道,您应该~#在行首使用转义:

    $ ssh -X localhost
    $ ~#
    The following connections are open:
      #0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
    $ netstat | grep 6010
    
    $ xterm &
    $ ~#
    The following connections are open:
      #0 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1)
      #1 x11 (t4 r3 i0/0 o0/0 fd 8/8 cc -1)
    $ netstat | grep 6010
    tcp6       0      0 localhost:6010          localhost:39698         ESTABLISHED
    tcp6       0      0 localhost:39698         localhost:6010          ESTABLISHED
    

    当我在 C 上运行 X 客户端时,如何验证它是否连接到 B(本地机器)上的 X 服务器?

    我不知道有任何直接的方法来检查它。我不知道返回运行 X11 服务器的机器的任何 X11 核心协议或扩展请求。您应该逐步进行:首先检查 X11 客户端是否连接到转发器,然后检查它在哪里转发连接等。

    • 1

相关问题

  • 为什么 ssh 实用程序被视为 pty?

  • Auto-SSH 手动工作,但不在后台工作

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • rsync 端口 22 和 873 使用

  • SCP突然中止:管道损坏,消息验证码不正确

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve