使用NMSSH库为“sudo”命令提供密码

时间:2014-01-12 20:59:32

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

我正在为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}

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

2 个答案:

答案 0 :(得分:3)

使用sudo -S

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

从手册页:

  

-S(stdin)选项导致sudo从中读取密码   标准输入而不是终端设备。密码必须是   接着是换行符。

答案 1 :(得分:0)

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

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

刚开始使用

进行编辑
  

sudo visudo

并通过以下编辑后的版本:

  

USERNAME ALL =(ALL)NOPASSWD:/ path / to / script

在文件的最后。