我如何重新连接到一个独立的mosh会话?

如何重新连接到分离的mosh会话或以其他方式摆脱

Mosh: You have a detached Mosh session on this server (mosh [XXXX]). 

即什么是相当于什么

 screen -D -R 

或者可能

 screen -wipe 

而且,这个答案在哪里可以find文档?

出于安全原因,您不能重新连接,请参阅https://github.com/keithw/mosh/issues/394

要终止分离的会话,请使用该消息中显示的PID号码(即“XXXX”部分)。例如,如果您看到 –

 Mosh: You have a detached Mosh session on this server (mosh [12345]). 

并且可以运行这个命令:

 kill 12345 

另外,要closures所有 mosh连接,您可以:

 kill `pidof mosh-server` 

请注意,如果您目前通过mosh连接,则最后一条命令也会与您断开连接。

令我惊讶的是,我使用CRIU( https://criu.org )来检查点,并重新启动一个mosh客户端,它工作。

令人震惊的。

find你的mosh-client的PID:

$ ps -ef | grep mosh

然后按照他们的说明安装CRIU。

然后,检查点是这样的:

$ mkdir检查点

$ sudo ./criu dump -D checkpoint -t PID –shell-job

然后,恢复它:

$ sudo ./criu restore -D checkpoint –shell-job

而且,在那里。 你的mosh客户端回来了。

但是需要注意的是,如果您的笔记本电脑重新启动(这是我们所要保护的内容的重点),mosh使用monotonic时钟来跟踪客户端的时间,这在重新启动时不起作用。 然而,如果你的笔记本电脑只是平坦的崩溃,它将无法正常工作,因为序列号将与检查点的版本不同步(二进制将恢复,但通信将停止)。

为了解决这个问题,你需要告诉mosh停止这样做,并下载mosh源代码。 然后,编辑这个文件:

cd mosh

vim configure.ac

然后,searchGETTIME并注释掉该行。

然后做:

autoreconf#或./autogen.sh如果你刚刚克隆它的第一次

。/configuration

使

进行安装

之后,您的CRIU检查点mosh客户端会话将在重新启动后继续。

(很明显,你需要写些东西来定期检查检查点,这对读者来说是一个练习)。

作为Varta答案的补充,我使用以下命令closures除当前连接之外的所有mosh连接:

pgrep mosh-server | grep -v $(ps -o ppid --no-headers $$) | xargs kill

我意识到这是一个旧的post,但是有一个非常简单的解决scheme,正如Keith Winstein,mosh作者所build议的: https : //github.com/mobile-shell/mosh/issues/394

“首先,如果你希望能够附加到来自多个客户端的会话(或者在客户端死亡之后),你应该使用screen或者tmux。Mosh是SSH的替代品(在某些情况下),而不是屏幕。许多Mosh用户将它与屏幕一起使用,就像这样。“

场景:我通过moshlogin到远程服务器。 然后我运行屏幕,并在屏幕会话中运行一个进程,例如htop。 我失去了连接(笔记本电脑电池死亡,失去networking连接等)。 我通过mosh再次连接,并在服务器上获取该消息,

Mosh:你在这台服务器上有一个Mosh会话(mosh [XXXX])。

我所要做的就是杀掉之前的mosh会话

杀死XXXX

重新连接到仍然存在的屏幕会话

屏幕-r

现在,htop(或任何正在运行的进程)就像没有中断一样重新运行。这对于运行升级或其他进程,如果突然中断将使服务器处于杂乱,未知状态特别有用。 我认为你可以做同样的tmux,虽然我还没有尝试过。 我相信这是Annihilannic和eskhool的build议。

我在服务器上使用mosh结合tmux,以确保我的会话在客户端由于某种原因而死亡的情况下持续存在,例如强制重启。

PS或者你可以继续使用屏幕,如果这是你的偏好。