2014-01-12 24 views
0

我为Objective-C called NMSSH使用了美妙的libssh包装。我能够建立连接,发送命令等,但我遇到了一些麻烦。每当我送提升的命令,如“sudo..something”,我得到我的响应对象以下错误:为NMSSH库提供“sudo”命令的密码

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

使用sudo -S

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

从手册页:

的-S(标准输入)选项导致须藤读取来自 标准输入,而不是终端装置的密码。密码必须是 ,后跟换行符。

+1

我upvoted这个答案,因为它可以工作,但是,取决于你的分布,它不。例如,使用NMSSH在CentOS机器上执行以下操作将返回相同的错误“echo | sudo -S ls /etc/init.d/”,但它可以在Ubuntu上使用。有关更多详情,请参阅此文章http://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-密码 – AndrewSmiley