Ios 为“提供密码”;sudo“;使用NMSSH库的命令
我正在为Objective-C使用一个很棒的libssh包装器。我能够建立连接、发送命令等,但我遇到了一些麻烦。每当我发送诸如“sudo..something”之类的提升命令时,我的响应对象中就会出现以下错误:Ios 为“提供密码”;sudo“;使用NMSSH库的命令,ios,objective-c,cocoa-touch,ssh,sudo,Ios,Objective C,Cocoa Touch,Ssh,Sudo,我正在为Objective-C使用一个很棒的libssh包装器。我能够建立连接、发送命令等,但我遇到了一些麻烦。每当我发送诸如“sudo..something”之类的提升命令时,我的响应对象中就会出现以下错误: Error: Error Domain=NMSSH Code=0 "sudo: no tty present and no askpass program specified " UserInfo=0x145a65e0 {command=sudo apachectl start, NSL
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}
如何告诉程序密码是什么?使用
sudo-S
:
[session.channel execute:@"echo password | sudo -S apachectl start" error:&error];
从手册页:
-S(stdin)选项使sudo从
标准输入,而不是终端设备。密码必须为
后跟换行符
使用
sudo-S
:
[session.channel execute:@"echo password | sudo -S apachectl start" error:&error];
从手册页:
-S(stdin)选项使sudo从
标准输入,而不是终端设备。密码必须为
后跟换行符
使用
sudo-S
:
[session.channel execute:@"echo password | sudo -S apachectl start" error:&error];
从手册页:
-S(stdin)选项使sudo从
标准输入,而不是终端设备。密码必须为
后跟换行符
使用
sudo-S
:
[session.channel execute:@"echo password | sudo -S apachectl start" error:&error];
从手册页:
-S(stdin)选项使sudo从
标准输入,而不是终端设备。密码必须为
后跟换行符
约拿布的解决方案是一个很好的简单方法,但它是非常不安全的 如果有人想以更安全的方式进行操作,他应该在目标系统上编辑“Sudoers文件”,如果可能的话,比如showen或 只要开始编辑就可以了 sudovisudo 并超过以下编辑版本: 用户名ALL=(ALL)NOPASSWD:/path/to/script
在文件的最后。jonahb的解决方案是一种很好且简单的方法,但它非常不安全 如果有人想以更安全的方式进行操作,他应该在目标系统上编辑“Sudoers文件”,如果可能的话,比如showen或 只要开始编辑就可以了 sudovisudo 并超过以下编辑版本: 用户名ALL=(ALL)NOPASSWD:/path/to/script
在文件的最后。jonahb的解决方案是一种很好且简单的方法,但它非常不安全 如果有人想以更安全的方式进行操作,他应该在目标系统上编辑“Sudoers文件”,如果可能的话,比如showen或 只要开始编辑就可以了 sudovisudo 并超过以下编辑版本: 用户名ALL=(ALL)NOPASSWD:/path/to/script
在文件的最后。jonahb的解决方案是一种很好且简单的方法,但它非常不安全 如果有人想以更安全的方式进行操作,他应该在目标系统上编辑“Sudoers文件”,如果可能的话,比如showen或 只要开始编辑就可以了 sudovisudo 并超过以下编辑版本: 用户名ALL=(ALL)NOPASSWD:/path/to/script
在文件的最后。我对这个答案投了更高的票,因为它确实有效,但是,取决于您的发行版,它不起作用。例如,在CentOS机器上使用NMSSH执行以下操作将返回相同的错误“echo | sudo-S ls/etc/init.d/”,但它将在Ubuntu上开箱即用。更多详细信息,请参阅本文。我对这个答案投了赞成票,因为它确实有效,但是,根据您的发行版,它不起作用。例如,在CentOS机器上使用NMSSH执行以下操作将返回相同的错误“echo | sudo-S ls/etc/init.d/”,但它将在Ubuntu上开箱即用。更多详细信息,请参阅本文。我对这个答案投了赞成票,因为它确实有效,但是,根据您的发行版,它不起作用。例如,在CentOS机器上使用NMSSH执行以下操作将返回相同的错误“echo | sudo-S ls/etc/init.d/”,但它将在Ubuntu上开箱即用。更多详细信息,请参阅本文。我对这个答案投了赞成票,因为它确实有效,但是,根据您的发行版,它不起作用。例如,在CentOS机器上使用NMSSH执行以下操作将返回相同的错误“echo | sudo-S ls/etc/init.d/”,但它将在Ubuntu上开箱即用。有关更多详细信息,请参阅本文