在非交互式SSH会话中运行apt-get install时,会话永远不会closures。 例:
ssh user@target "sudo apt-get -y install my_package"
my_package没有正确安装,但是SSH会话只是悬而未决。
有没有任何标志可以通过SSH获取apt-get工作?
远程安装用于在集成服务器上自动部署软件包。 只要我们将一些代码更改推送到存储库中,作业就会引入代码,构build软件包并在集成上部署,以检查一切正常(就部署而言)。
apt-get update SSH会话完全closures。 请注意, apt-get update不是交互式的,而apt-get install是。 这可能表明交互性是一个问题。 ssh user@target "sudo apt-get install my_package && echo Hello"永远不会到达echo 。 debconf抱怨说找不到一个不错的前端(Display,Readline),并且回退到Teletype(尽pipeReadline可用)。 -t强制使用SSH的TTY不会有帮助。 DEBIAN_FRONTEND=noninteractive 。 关于SF的下面的答案做了诀窍:
从cron bash脚本运行时,ssh无法执行远程命令
-t标志强制执行一个伪tty分配,除了在本地没有TTY时。 但是像-t -t这样两次通过国旗就是假装这样做的。 这解决了这个问题。
请参阅SSH文档:
-t强制伪tty分配。 这可以用来在远程机器上执行任意基于屏幕的程序,这可能是非常有用的,例如在实现菜单服务时。 多个-t选项强制tty分配,即使ssh没有本地tty。
那么为什么这样做呢? 事实certificate, debconf不会再抱怨日志中的前端。 所以我相信,根据需要,使用双-t (lures?) debconf ,它允许apt-get install完成,干净地结束SSH会话。
当我看透它时,这可能会完成这项工作。 调用任何命令应该跟随退出和heredoc。 find解决scheme,但没有亲自尝试过。
ssh user@myremotemachine <<-EOF free -m exit EOF
原来的答案来自这里: http : //www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
在debian / jessie下,我用这个命令成功了:
ssh user@host "TERM=READLINE sudo apt-get install --reinstall less && echo done"
但也许你应该考虑使用这个和其他upcomming任务http://docs.ansible.com/ansible/apt_module.html