ssh 客户端可以连接到远程计算机上运行的现有 shell 吗?

ssh 客户端可以连接到远程计算机上运行的现有 shell 吗?

每当我 ssh 到远程计算机时,它总是会创建一个新的远程 shell。

ssh 客户端可以连接到远程计算机上运行的现有 shell 吗?

答案1

不可以,ssh 客户端无法连接到现有的正在运行的 shell。

安全外壳连接协议指定交互式会话是:

会话是程序的远程执行。该计划可能是:

  • 如地狱,
  • 一个应用程序,
  • 系统命令,
  • 或一些内置子系统。

它可能有也可能没有 tty,并且可能涉及也可能不涉及 X11 转发。多个会话可以同时处于活动状态。

它继续澄清,在启动 shell 或命令(我的重点):

会话建立后,就会有一个程序开始在远端。该程序可以是 shell、应用程序或具有与主机无关的名称的子系统。每个通道中只有一个请求可以成功。

该文档随后说明了客户如何提出请求(我再次强调):

  • 一个“shell”,它“将请求用户的默认 shell(通常在 UNIX 系统中的 /etc/passwd 中定义)”开始在另一端”,或
  • “exec”,“将请求服务器开始执行给定的命令。”,或
  • “子系统”,“执行预定义的子系统”(例如 sftp)

因此,ssh 连接只能启动一个新的 shell。

正如一条评论所指出的,你可以仿真通过在远程端创建screen或会话来连接到现有 shell 的行为,然后通过(创建新的 $SHELL 实例!)连接到该远程系统,然后在该新 shell 中使用或命令附加到现有会话。tmuxsshscreentmux

答案2

是的,尽管这在几年前是不可能的。近年来,Linux 内核引入了一项名为 eBPF 的新功能。 SSH 日志 (https://github.com/sshlog/agent) 守护进程使用它来跨进程监听并允许您连接到其他用户的 SSH 会话。

安装后,首先运行命令列出服务器上的所有活动会话。

mhill@devlaptop:~$ sshlog sessions
  
 User        Last Activity             Last Command               Session Start              Client IP           TTY
mhill           just now              /usr/bin/gcc             2023-04-10 16:16:18        127.0.0.1:58668         17
billy          10 min ago            /usr/sbin/fdisk           2023-04-10 12:11:05        15.12.5.8:58669         32

并附加到它们:

mhill@devlaptop:~$ sshlog attach 32

Attached to TTY 32.  Press CTRL+Q to exit

billy@devlaptop:~$ 

现在您正在与另一个用户/会话共享此远程 shell。您可以像在您自己的会话中一样发出命令。

相关内容