我可以连接到或查看废弃的 ssh 会话吗?

我可以连接到或查看废弃的 ssh 会话吗?

我有一个正在运行的 redhat 虚拟实例,我可以ssh从公司网络上的任何主机访问它。我的ssh会话在运行某些脚本时被丢弃,这些脚本可能会或不会导致我断开连接。该who命令在本地仍然列出已断开的连接。重新连接ssh将开始一个全新的会话。有没有办法连接到原始会话?如果不行我可以杀掉它吗?我有root权限和物理访问权限。我在最初的会话中没有使用屏幕。

答案1

你想使用屏幕在遥控器上,然后当您 ssh 回来时,您将重新连接到该屏幕实例。

但不,你不能重新连接到 ssh 会话本身,你必须使用 screen (或其他类似的东西来促进这一点)。

看着这个问题至少还有一个其他选项以及它(tmux)和屏幕之间的一些差异。读完这个问题的答案后......我实际上会说多路复用器更好

哦,是的,你可以通过kill进程(包括分叉的 bash)来阻止它,你可能会尝试skill按名称杀死用户,但我怀疑如果该用户是 root...它可能会尝试杀死它不能杀死的东西。

答案已更新多次

答案2

默认情况下,您无法重新连接到废弃的 ssh 会话。但是,您可以在 ssh 会话内设置进程,在重新建立新的 ssh 会话后可以重新连接到该进程。

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

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

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

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

最后一些截图屏风。

答案3

如前所述,屏幕可能是您最好的选择。如果/当您的会话被删除时,它将继续运行。键入“screen -list”以查看可用会话,然后键入“screen -r <session>”以查看所需的会话。一个小提示,您可以使用 Tab 键完成会话字符串,而不是复制/粘贴整个字符串。

然而,屏幕可能会很烦人。在我的客户端中,您无法轻松地向上滚动以查看控制台中的历史记录。它的行为与您的预期略有不同。如果您只想确保长时间运行的进程不会被杀死,请使用“nohup”。当您失去连接时,它将防止您的进程被关闭。不过,如果您想监视它,请确保将过程输出发送到文件。另外,如果您有 bash 脚本,我认为您需要在 nohup 前面显式调用“bash”。一个例子...

nohup bash ./myscript.sh > output.log 2>&1 &

这意味着 nohup,为了防止杀死进程,bash 显式调用 bash 如果你的脚本中有 bash 特定的东西,你的脚本在当前目录中称为“myscript.sh”,output.log 作为发送 std 和 的文件错误输出到末尾的“&”以在后台运行该过程。

相关内容