【问题标题】:Providing a password for "sudo" commands with NMSSH library使用 NMSSH 库为“sudo”命令提供密码
【发布时间】:2014-01-12 20:59:32
【问题描述】:

我正在为 Objective-C called NMSSH 使用一个很棒的 libssh 包装器。我能够建立连接、发送命令等,但我遇到了一些麻烦。每当我发送像“sudo..something”这样的提升命令时,我的响应对象中都会出现以下错误:

Error: Error Domain=NMSSH Code=0 "sudo: no tty present and no askpass program specified
" UserInfo=0x145a65e0 {command=sudo apachectl start, NSLocalizedDescription=sudo: no tty present and no askpass program specified
, NSLocalizedFailureReason=54}

如何告诉程序密码是什么?

【问题讨论】:

    标签: ios objective-c cocoa-touch ssh sudo


    【解决方案1】:

    使用sudo -S:

    [session.channel execute:@"echo password | sudo -S apachectl start" error:&error];
    

    来自手册页:

    -S (stdin) 选项使 sudo 从 标准输入而不是终端设备。密码必须是 后跟换行符。

    【讨论】:

    • 我赞成这个答案,因为它确实有效,但是,根据您的发行版,它不起作用。例如,在带有 NMSSH 的 CentOS 机器上执行以下命令将返回相同的错误“echo | sudo -S ls /etc/init.d/”,但它可以在 Ubuntu 上开箱即用。有关更多详细信息,请参阅此帖子unix.stackexchange.com/questions/122616/…
    【解决方案2】:

    jonahb 的解决方案是一种不错且简单的方法,但它非常不安全!

    如果有人想以更安全的方式执行此操作,他应该尽可能编辑目标系统上的“Sudoers 文件”,例如显示 herehere

    开始编辑

    sudo visudo

    和过去的编辑版本来自:

    用户名 ALL=(ALL) NOPASSWD: /path/to/script

    在文件的最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 2016-07-08
      • 2011-06-14
      相关资源
      最近更新 更多