当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

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

ssh <remote_srv> "apt-get autoremove"

在我sshd_config我有“的PermitRootLogin without-password”我已经加根的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的de man页面中查看了这个内容,但是我无法理解pseudo-terms和ttys的解释。

有没有人可以解释上述错误?我想这是一个缺少选项,但是哪个?

这两个平台都是Ubuntu 14.04 LTS。

最佳解决方法

我认为它与apt-get autoremove在非交互式shell中运行这一事实有关。请参阅Is it possibe to answer dialog questions when installing under docker?

解决方案似乎是使用DEBIAN_FRONTEND=noninteractive为命令添加前缀:

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

次佳解决方法

Alex的解决方案确实可以抑制错误,他几乎可以解决问题,但它不允许你回答任何问题(当你预先给出答案并从脚本运行时这很好,但是当你尝试新包时真的很烦人)。核心问题是ssh和debconf的各种前端所做出的假设之间的相互作用。

让我们从ssh开始吧。 ssh假设当你没有指定远程命令时,你想要远程端有一个pty而你指定一个你没有的远程命令(它在90%的时间内工作得非常好,而不是这个)。这可以通过强制pty的-t选项或强制没有pty的-T选项(或相应的配置文件选项)来覆盖。此外,当使用pty时,将复制TERM环境变量(例外情况可能适用于已完成详细信息和官方抽奖活动表格的检查文档)。另外值得注意的是,-x选项禁用X11转发,-X启用它。

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

我相信最好看的前端是gnome(还有一个我没有工作的ked前端)。 gnome前端(以及kde一个)需要一些non-default库和一个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变量中指定的最低功能级别的终端(实际上,这是除了dumb之外具有完整terminfo描述的任何东西)。

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

要么

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

readline前端的要求不那么严格,可以使用哑终端,但需要一个pty。

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"

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1884.html,未经允许,请勿转载。