【问题标题】:Paramiko error when trying to edit file: "sudo: no tty present and no askpass program specified"尝试编辑文件时出现 Paramiko 错误:“sudo:不存在 tty 且未指定 askpass 程序”
【发布时间】:2016-02-08 07:57:26
【问题描述】:

我正在使用 Paramiko 进行 SSH 并编辑配置文件。文件本身需要 sudo 权限才能编辑。到目前为止,这还不是问题,因为我刚刚为脚本中的其他 sudo 命令完成了echo <sudopw> | sudo <command>

但是,当我尝试使用 sed 编辑此文件时,没有任何反应。 stderr 产生:sudo: no tty present and no askpass program specified

这是我的代码:

stdin, stdout, stderr = client.exec_command
('echo <sudopassword> | sudo sed -i -e \"\\$aAllowUsers\" /etc/ssh/sshd_config)')

我尝试过使用invoke_shell 的解决方案,但似乎没有任何效果。编辑此文件的任何解决方案都会有所帮助。

编辑:这已经解决了!不要使用get_pty。在“sudo”之后使用 sudo 的 -S 选项。

【问题讨论】:

标签: python linux ssh sudo paramiko


【解决方案1】:

如果您阅读了错误消息

sudo: no tty present and no askpass program specified

然后您可以轻松找到解决方案:将-t 选项添加到您的ssh 命令中:

-t
强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如实现菜单服务时。多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty。

这已经讨论过了:

关于 Paramiko,有一些相关的问题,有几种不同的方法:

  • 使用ssh Channelget_pty 方法获取伪终端(类似于告诉ssh 这样做)
  • 使用sudo-S 选项,并在标准输出中发送密码。

有关讨论,请在此处查看建议的答案:

【讨论】: