在非交互式SSH会话中运行apt-get install时,会话永远不会关闭.例:
ssh user@target "sudo apt-get -y install my_package"
my_package确实安装正确,但SSH会话只是悬空.
题
是否有任何标志可以通过SSH获得apt-get工作?
附加信息
上下文
远程安装用于在集成服务器上自动部署程序包.一旦我们将一些代码更改推送到存储库,作业就会提取代码,构建程序包,并在集成时部署它以检查一切是否正常(就部署而言).
已经尝试过& amp;笔记
>执行apt-get update的同一个SSH会话干净地关闭.请注意,apt-get update不是交互式的,而apt-get install则是.这可能表明交互性是一个问题.
>像ssh user @ target这样的命令“sudo apt-get install my_package&& echo Hello”永远不会到达回声.
> debconf抱怨它找不到一个好的前端(Display,Readline),并且它回退到Teletype(尽管Readline可用).
>关于debconf的前端,使用SSH传递-t强制TTY没有帮助. DEBIAN_FRONTEND =非交互式.
>所有这些都是在Ubuntu 12_04 LTS上完成的.
ssh fails to execute remote command when run from cron bash script
-t标志强制执行伪tty分配,除非本地没有TTY.但是像-t -t那样两次传递旗帜只是假装这样做.这解决了这个问题.
请参阅SSH文档:
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine,which can be very useful,e.g. when implementing menu services. Multiple -t options force tty allocation,even if ssh has no local tty.
现在,为什么这样做?事实证明,debconf不再抱怨日志中的前端.所以我认为双-t设置(诱饵?)debconf根据需要,它允许apt-get安装完成以干净地结束SSH会话.