如何使用ssh在远程Unix计算机上运行命令并在命令完成之前退出?


17

如何使用ssh在Unix机器上运行命令并在命令完成之前退出?

例如,如果我输入

ssh localhost 'sleep 60 &'

即使睡眠在后台运行,ssh仍会挂在我的终端上,直到睡眠完成。


您可能需要&引号之外的内容。
布拉德·吉尔伯特

1
不,这只是将整个套件和kaboodle放在后台,而我无法输入密码。
理查德·霍斯金斯

Answers:


19

SSH具有-f开关,其功能与在客户端上使用nohup完全相同,但ssh可能要求输入密码。像这样使用它:

ssh localhost -f 'command'

但是:SSH仍将在后台运行,因此,如果您在服务器上的命令完成之前关闭客户端,它将被中止。如果要在执行命令后关闭ssh连接,可以使用服务器端的屏幕:

ssh localhost -f 'screen -d -m sleep 60'

如果我执行'ssh remotemachine -n​​'长期运行的命令> withremoteredirects 2>&1 </ dev / null&'并且客户端关闭,命令是否完成?
理查德·霍斯金斯

Afaik号 我的ssh连接丢失了,ssh守护进程应终止所有“在ssh内部”的终端。回答:自从终端启动命令后,由于父进程终止,它们将被终止。但这值得尝试;)
马丁

服务器端的“ nohup”而不是“ screen”呢?
理查德·霍斯金斯

@布拉德·吉尔伯特什么都没有?我可以想到几件事,但是没有一个共同点,那就是“屏幕”并非在所有POSIX机器上都可用。
理查德·霍斯金斯


6

使用nohup,stdout / stderr重定向,并在后台运行命令:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

编辑:甚至更好,只需使用ssh的-f参数:

ssh -f localhost 'sleep 60'

您可以将两个重定向与结合使用&>/dev/null
布拉德·吉尔伯特

@BradGilbert该语法与POSIX不兼容;很难为了牺牲一些字符而牺牲兼容性。
Tripleee '18

2

或者,在使用登录后sshscreen如果您想稍后返回,请开始查看进度或输出。


您也可以使用“ tmux”,我个人认为它更易于配置。这两个应用程序各有千秋,各有千秋。
mzuther
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.