在后台运行远程 ssh 命令但仍显示的最佳方法是什么?

vfc*_*sts 15 ssh remote background

我需要远程运行 SSH 命令,并在本地显示输出。但是如果连接中断,我希望命令仍然运行。

我不是在谈论登录和执行,而是在做 ssh user@remotehost 'commands && command etc'

即使连接中断,我如何确保命令运行?

Fal*_*mot 27

最好的方法是使用 screen,即使连接中断,它也能以持久的方式保持会话打开(如果你想再次开始使用它,你可以执行 ascreen -r并且它会再次打开它)。

为您想要运行的任何命令添加前缀screen(例如ssh -t user@host screen command)应该可以完成这项工作。

如果您希望它在 shell 的后台运行,您还可以将 an 附加&到整个内容。


Sha*_*den 11

您是否希望有一个可以恢复的持久会话,或者只是为了阻止断开连接而终止执行?

对于前者,使用screen,对于后者,使用nohup


Kon*_*bas 7

正如前面提到的,screen可以做所有的把戏。但不仅仅是你需要的。我已经使用 screen 多年了,现在每次登录系统时都会使用它。尝试使用这样的配置安装screen和创建~/.screenrc

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "
Run Code Online (Sandbox Code Playgroud)

然后运行screen -Rd vcf。这是最好的调用 screen. 您将重新连接到先前创建的名为 vcf* 的会话(如果有歧义则警告),或者,如果会话尚未打开,它将被创建。CTRL+A是一个可以做所有事情的元键。CTRL+A C( CTRL+ A, then C) 在会话中创建新窗口(屏幕)。CTRL+A SPACE将焦点移动到一轮中的下一个窗口。CTRL+A D分离当前会话,保持连接之间的所有窗口正常运行。如果您启动了一些 looooong 任务,您可以从屏幕上分离并稍后重新附加到它以查看会发生什么。如果您的 ssh 会话丢失,也会发生同样的情况 - 所有打开的窗口和启动的所有任务的屏幕都保持活动状态。

如果您想关闭屏幕内的某个窗口 - 只需exit从其中的 shell 即可。如果您想关闭所有窗口中的所有外壳程序/任务并退出屏幕 - 只需按CTRL+A CTRL+\并在询问时按“Y”。

对于所有其他人,请参阅 man screen。