使用ssh时无法初始化前端:对话框


52

我以root身份在测试环境中通过ssh执行以下命令:

ssh <remote_srv> "apt-get autoremove"

在我的sshd_config中,我具有“没有密码的PermitRootLogin”,并且已将root的id_rsa.pub添加到远程服务器上的authorized_keys文件中。

但是,我得到以下错误:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype

我已经在ssh的手册页中对此进行了查找,但无法将我的想法笼罩在有关伪术语和ttys的解释上。

有谁能解释以上错误?我想这是一个缺少的选择,但是哪个呢?

这两个平台都是Ubuntu 14.04 LTS。

Answers:


62

我认为这与apt-get autoremove在非交互式外壳中运行的事实有关。请参阅在docker下安装时可能回答对话框问题吗?

解决方案似乎是在命令前添加DEBIAN_FRONTEND=noninteractive

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

12
当在docker安装过程中使用apt-get并添加前缀时,会发生这种情况,效果很好
Neil McGill 2015年

谢谢你尼尔的评论。我感觉自己迷路了,但是在docker安装过程中使用apt-get时遇到了同样的问题。
Qcom 2015年

13

Alex的解决方案确实可以消除错误,并且他几乎可以解决问题,但是它不允许您回答任何问题(当您预先填写答案并从脚本运行时很好,但是在尝试新软件包时确实很烦人) )。核心问题是ssh的假设与debconf的各种前端之间的相互作用。

让我们从ssh开始。ssh假定,当您不指定远程命令时,您希望在远程端上有一个pty,而您却指定了您不需要的远程命令(这在90%的时间内非常有效,只是不行)。可以通过-t强制pty的-T选项或不强制pty的选项(或相应的配置文件选项)来覆盖。此外,当使用pty时,将TERM复制环境变量(例外情况可能适用于检查文档,以获取完整的详细信息和正式抽奖条目表)。还要注意,该-x选项禁用X11转发并-X启用它。

Debconf本身没有交互性要求(通过设计),但是各种前端都有,并且每个前端都有不同的要求。

我认为外观最好的前端是gnome(也有一个我未使用过的ked前端)。gnome前端(以及kde前端)需要一些非默认库和X11服务器,因此强制gnome前端(一旦安装了适当的库)的命令行将是

ssh -X <remote_srv> "DEBIAN_FRONTEND=gnome apt-get autoremove"

或者如果您更喜欢kde

ssh -X <remote_srv> "DEBIAN_FRONTEND=kde apt-get autoremove"

对话框前端(默认值)需要一个pty和一个终端,该终端必须具有在TERM变量中指定的最低功能级别(实际上,这是任何具有完全terminfo描述的东西,但dumb除外)。

ssh -t <remote_srv> "TERM=$TERM DEBIAN_FRONTEND=dialog apt-get autoremove"

要么

ssh -t <remote_srv> "apt-get autoremove"

readline前端的要求不那么严格,可以与哑终端一起使用,但需要一点钱。

ssh -t <remote_srv> "DEBIAN_FRONTEND=readline apt-get autoremove"

编辑器前端依赖于一个编辑器,该编辑器将根据编辑器有特定的要求。

ssh -t <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=vi apt-get autoremove"
ssh -X <remote_srv> "DEBIAN_FRONTEND=editor EDITOR=gvim\ -f apt-get autoremove"

非交互式前端没有任何要求,但是它不会提出任何问题(可能不是您想要的)。

ssh <remote_srv> "DEBIAN_FRONTEND=noninteractive apt-get autoremove"

“ readline前端的要求不那么严格,可以与哑终端一起使用,但需要一点钱。” 您能解释一下我该如何设定吗?
linuxatico '16

@linuxatico,ssh -t有关更多详细信息和其他选项,请参见ssh手册页。还要重新阅读此答案的第二段。
希尔德
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.