恢复 ssh 会话连接

恢复 ssh 会话连接

我对 ubuntu 还很陌生,我需要做一些事情,但我不知道该怎么做。

假设我想连接到一个服务器,开始一个大型编译(数小时),并且我不想在编译时保持与服务器的连接。

现在,如果我断开连接并再次连接,我将看不到编译的输出(我假设连接创建了一个新的会话)

有没有办法连接、启动某项服务、断开连接,并在再次连接时恢复之前的连接,以便我可以看到迄今为止完成的所有控制台输出?(就像我使用远程桌面,但在 ssh 中)

谢谢

编辑:

实际上,我感兴趣的是恢复控制台会话。想象一下,我可能正在运行的编译或任何其他程序在某个时候要求用户输入才能继续。

玩具示例:

1)我通过 ssh 连接

2)我跑步sudo apt-get dist-upgrade

3)这将要求我确认升级(我知道我可以传递一些标志来避免确认,但我不想)

4)我断绝了

5) 我再次连接,希望能够看到历史记录,并且控制台要求我确认是否升级

6)我确认升级并再次断开连接。

答案1

您需要一个持久的终端多路复用器,例如tmux或者GNU 屏幕

这些允许您在单个连接中打开一个或多个 shell 会话;与它们分离(无论是故意的,比如在工作日结束时,还是无意的,例如由于网络问题)并稍后重新连接到相同的 shell 会话。

有许多子命令和可能的自定义,但典型的用法是

$ tmux      /* starts new shell, with tmux status bar at the bottom of terminal window */
$           /* do stuff */
$ Ctrl-b d  /* key escape sequence to detach from tmux session */
$ exit

            /* ... time passes; much later you ssh back in ... */

$ tmux attach

            /* and you're back on the session you detached from */

另外需要注意的是,虽然我提供了项目网页的链接,但这两个选项都是为 ubuntu 打包的,sudo apt install如果尚未安装在您正在运行的操作系统版本上,则可以通过 进行安装。

答案2

您可以像这样启动命令

nohup <your command>  &

这不仅会将进程从你的 ssh shell 中分离(否则进程将在注销时被终止),还会创建一个名为 nohup.out 的文件,其中包含进程的所有输出。

相关内容