it-swarm.cn

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

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

我希望可能会有一种轻松的方式,就像UI在虚拟桌面上一样。

21
JPrescottSanders

您要使用的屏幕是屏幕,或者甚至更好的是称为byobu的屏幕周围的用户友好包装器。

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

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

另一个不错的功能是,当ssh连接断开时,您的所有屏幕都可以停滞不动。您只需通过ssh再次连接并致电byobu,一切便像以前一样。

最后,byobu的一些 屏幕截图

24
txwikinger

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

screen-这很简单。它开始一个新的屏幕会话screen -ls-列出所有活动的屏幕会话。是的,您可以在多个屏幕中拥有多个终端。 SO甜。

样本

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>-这将恢复独立的屏幕会话,即IE:screen -x 16467

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

(LOAD) 0$* bash

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

如果您想退出屏幕但保持其运行,请使用Ctrl + A然后使用d,这将断开您的会话。最后,您可以通过使用Ctrl + A然后使用k关闭标签,这会杀死该标签(如果它锁定了),但是通常您可以像在终端机中一样输入exit关闭该标签。

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

Screen提供了很多选项,您应该将它倒在man文件中以获取更多信息。有一些缺点。您不能在“屏幕”中使用滚动条,而必须使用缓冲控件来回滚,但是以上内容足以使您开始了解这是否是可行的选择。这是一件很棒的事情,而作为系统管理员,我已经做了很多事情-网络连接。如果您的网络中断,您的操作将不会丢失!由于屏幕正在服务器上运行。您只需要通过SSH重新登录,然后screen -lsscreen -x重新登录到会话。

5
Marco Ceppi

如果您使用的是Ubuntu Server Edition,则byobu绝对是您的最佳选择。 《 Ubuntu Server指南》具有 一些有用的文档

通常,它比screen更容易学习和使用,并且默认情况下已安装。

1
jbowtie

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

$ cat /home/cjac/.screenrc 

逃脱^ \

试试看!

0
cjac