如何通过一个 SSH 连接进行多个终端会话?

如何通过一个 SSH 连接进行多个终端会话?

我有一个正在运行的 Ubuntu 服务器版本,我可以通过 SSH 进入它来执行各种任务。我希望能够通过 SSH 进入我的服务器,启动服务器应用程序,然后切换到另一个“虚拟”会话(在同一个 SSH 实例中)并针对该服务运行客户端调用。当我启动该服务时,它是一个阻塞调用,因此如果不启动另一个 SSH 会话,我就无法针对它运行客户端调用。

我希望可能有一种更巧妙的方法,类似于 UI 与虚拟桌面所做的那样。

答案1

您想要使用的是屏幕,或者更好的是,使用名为 byobu 的用户友好型屏幕包装器。

Screen 允许您在同一个 ssh 会话中运行多个虚拟终端会话。教程帮助页面可用。

屏风是一个包装器,允许使用简单的功能键(而不是 ctrl-a 组合键)轻松打开新屏幕。它还会显示一个状态行,其中包含所有可以命名的打开的虚拟终端。

另一个不错的功能是,当 ssh 连接断开时,所有屏幕都可以保持打开状态。您只需通过 ssh 重新连接并调用 byobu,一切就和以前一样了。

最后一些截图屏风。

答案2

GNU 屏幕是您一直在寻找的答案 - 但它很像 Vi。您已经学习了很多命令来设置成功的 Screen 环境。这里有一些入门知识。首先您需要这个.screenrc http://paste.ubuntu.com/473764/将其保存在远程服务器上的用户主文件夹中。接下来在远程计算机上安装屏幕 ( sudo apt-get install screen) 接下来您需要启动它,以下是一些用于“启动屏幕”的命令:

screen- 这很简单。它启动一个新的屏幕会话 screen -ls- 列出所有活动的屏幕会话。是的,您可以在多个屏幕内拥有多个终端。太棒了。

样本

screen -ls
There is a screen on:
    16467.pts-0.ubuntu  (08/05/2010 07:47:53 PM)    (Detached)
1 Socket in /var/run/screen/S-marco.

screen -x <pid>- 这将恢复分离的屏幕会话,即:screen -x 16467

进入屏幕后(并使用了我的示例.screenrc文件),您会在底部看到以下内容:

(LOAD) 0$* bash

这是服务器负载和所有打开的“终端选项卡”的列表。当前只有一个窗口。输入一些内容然后按此组合键:Ctrl + A释放,然后按cCtrl + A是转义序列。所有命令都以此组合键开头。c是创建新选项卡。您会注意到页脚有(LOAD) 0-$ bash 1$* bash显示有另一个选项卡打开,活动选项卡是 1 号。每个屏幕会话最多可以打开 60 个选项卡。

如果您想退出 screen 但又想让它继续运行,请使用Ctrl + Athen d,这将断开您的会话。最后,您可以使用Ctrl + Athen关闭标签k,这将终止该标签(如果它锁定了),但通常您只需像exit在终端中一样键入内容,它就会关闭该标签。

Ctrl + A最后,要列出所有打开的窗口,您可以键入"

Screen 有一大堆可用选项,您应该仔细阅读手册文件以了解更多。但也有一些缺点。您无法在 Screen 中使用滚动条,您必须使用缓冲区控件来回滚,但是上面的内容足以让您开始了解这是否是一个可行的选项。这方面的一个优点是我作为系统管理员经常处理的事情 - 网络连接。如果您的网络断线,您的操作不会丢失!由于 Screen 在服务器上运行。您只需通过 SSH 重新登录,然后screen -ls返回screen -x您的会话即可。

答案3

如果你正在使用 Ubuntu 服务器版,byobu那么它绝对是你的最佳选择。Ubuntu 服务器指南有一些有用的文档

screen它通常比默认安装的更容易学习和使用。

答案4

我使用 Emacs,因此 screen 的默认配置让我的生活变得困难。

$ cat /home/cjac/.screenrc 

逃走^\

尝试一下!

相关内容