当前位置: 首页 > 面试题库 >

尝试编辑文件时出现paramiko错误:“ sudo:不存在tty且未指定askpass程序”

东深
2023-03-14
问题内容

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

但是,当我尝试使用sed编辑此文件时,没有任何反应。stderr产生:sudo: no tty present and no askpassprogram 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选项。


问题答案:

如果您阅读错误消息

sudo: no tty present and no askpass program specified

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

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

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

  • 使用get_ptyssh的方法Channel获得伪终端(类似于告诉ssh这样做)
  • 使用的-S选项sudo,然后在标准输出上发送密码。


 类似资料:
  • 我已经安装了一个lemp docker容器W/Ubuntu 16.04、Nginx、Mariadb和PHP 7.0,并设置了postfix和基本的ssh功能,这些功能都能正常工作。我已经创建了一个具有sudo权限的非root用户(在sudo组中),但是当我试图使用sudo时,我得到了一个错误 Sudo:没有tty存在,也没有指定askpass程序 这种情况发生在、、等。 我使用visudo进入文件

  • 我正在尝试使用Makefile编译一些源代码。在makefile中,有一堆命令需要作为运行。 当我从终端编译源代码时,一切都很好,make在第一次运行命令等待密码时暂停。一旦我键入密码,使简历和完成。 但我希望能够在NetBeans中编译源代码。因此,我启动了一个项目,并向netbeans展示在哪里可以找到源代码,但当我编译该项目时,它会出现错误: 当它第一次命中命令时。 我已经在互联网上查找了这

  • 我有一个php页面,它试图运行服务重启,使用: 我需要编辑我的sudoers文件来实现这一点。因此: 和 当失败时,作为一个测试,我运行: 我运行了一个shell_exec,没有使用sudo命令: 这返回了预期的“Apache”。于是我跑了: 返回“uid=48(apache)gid=48(apache)groups=48(apache),10(wheel)” 我对照正在做同样事情的工作系统检查了

  • 问题内容: 没有系统更改,每次尝试从中安装gem时,都会因该错误而开始失败,尽管我什至都看不到为什么调用sudo,因为gems安装在本地rvm目录中。 有人看过吗? 问题答案: 要让詹金斯安装gem,他需要属于rvm组: 在debian中,这意味着: 至少对我有用。

  • 我想自动化一个构建-目前,在我的开发过程中,所以不涉及安全的东西。 从构建器(Qt Creator)运行脚本时,不会提示我输入sudo密码,但会出现错误 我已经找到了一些解决办法,但就是不起作用...我错过了什么? 确切代码: 我按照上面回答的建议做了:编辑了visudo并添加了脚本...甚至还添加了Qmake... 同样的错误 编辑:在问完这个问题后,我发现了一个类似的建议问题:https://