问题描述
我有一个正在运行的 Ubuntu 服务器版本,我可以通过 SSH 连接到它来执行各种任务。我想要的是能够通过 SSH 进入我的服务器启动服务器应用程序,然后切换到另一个 “virtual” 会话(在同一个 SSH 实例中)并对服务运行客户端调用。当我启动该服务时,它是一个阻塞调用,因此我无法在不启动另一个 SSH 会话的情况下对它运行客户端调用。
我希望可能有一种更灵活的方式,就像 UI 对虚拟桌面所做的那样。
最佳方案
您想要使用的是屏幕,或者更好的是屏幕周围的 user-friendly 包装器,称为 byobu。
Screen 允许您在同一个 ssh 会话中运行多个虚拟终端会话。 tutorial 和 help pages 可用。
byobu 是一个包装器,允许使用简单的功能键而不是 ctrl-a 的组合键轻松打开新屏幕。它还显示一个状态行,其中包含所有可以命名的打开的虚拟终端。
另一个不错的功能是,当您的 ssh 连接断开时,您的所有屏幕都可以保持显示状态。您只需通过 ssh 再次连接并调用 byobu,一切都像以前一样。
最后一些 screenshots byobu。
次佳方案
GNU Screen 是您一直在寻找的答案——但它很像 Vi。您已经学习了很多命令来设置成功的 Screen 环境。这里有一些东西可以帮助您入门。首先,您需要将此 .screenrc
http://paste.ubuntu.com/473764/ 保存在远程服务器上您的用户主文件夹中。 Next install screen on the remote machine (sudo apt-get install screen
) 接下来你要启动它,这里有一些“启动屏幕”的命令:
screen
– 这很简单。它启动一个新的屏幕会话\n 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
这是服务器负载和所有打开的列表 “terminal tabs”。目前只有一个窗口。键入内容然后按此组合键:Ctrl + A
释放,然后按 c
。 Ctrl + A
是转义序列。所有命令都以此组合开头。 c
是创建新标签。您会注意到页脚有 (LOAD) 0-$ bash 1$* bash
,这表明有另一个选项卡打开并且活动选项卡编号为 1。每个屏幕会话最多可以打开 60 个选项卡。
如果你想退出屏幕但保持它运行使用 Ctrl + A
然后 d
这将分离你的会话。最后,您可以使用 Ctrl + A
然后 k
关闭选项卡,这将终止该选项卡(如果它锁定),但通常您只需键入 exit
就好像您在终端中一样,它将关闭该选项卡。
最后,要列出所有打开的窗口,您可以键入 Ctrl + A
,然后键入 "
。
Screen 有一大堆可用的选项,您应该查看 man 文件以获取更多选项。有一些缺点。您不能在 Screen 中使用滚动条,您必须使用缓冲区控件来回滚,但是以上内容足以让您开始了解这是否是一个可行的选项。这是一件很棒的事情,也是我作为系统管理员经常处理的事情——网络连接。如果您的网络中断,您的操作也不会丢失!由于屏幕正在服务器上运行。您只需通过 SSH 重新登录,然后 screen -ls
和 screen -x
重新登录您的会话。