好的,这是一个棘手的问题:
首先,我有一个在 Unix 机器上运行的非常小的 C 应用程序。此应用程序获取两个参数并尝试在 Linux (Ubuntu) 机器中执行 .sh 文件,如下所示:
./myapp luke leia
好的,现在 C 代码或多或少地执行以下操作:
char temp[512];
sprintf(temp, "ssh user@server \"sh \\$HOME/save.sh %s %s\"", argv[1], argv[2]);
system((char *)temp);
如您所见,它打开了与我的 Linux 服务器的连接,并在我的“用户”的主文件夹中执行了一个批处理脚本。这是我直接在终端中尝试时的样子:
ssh user@server "sh \$HOME/save.sh luke leia"
在我的 Unix 端,我被要求输入 SSH 的密码,它工作得很好。我从我的 Unix 机器中的 save.sh 文件中获得了所有回声,它运行良好,除非我需要 sudo 权限。所以我在我的服务器上尝试了这个:
在服务器中使用,在我输入
sudo visudo
的行下方%sudo ALL=(ALL) ALL
:%user ALL=(ALL) NOPASSWD: /home/user/save.sh
我的 save.sh 看起来像这样:
#! /bin/bash sudo echo "[save action] args: ${1} , ${2}" >> /somewhere/save.log; echo "${1} and ${2} are brother and sister.";
- 我的文件夹“某处”属于根目录,所以通常我的“用户”无法保存它。所以我改变了我的应用程序中的代码来处理这个命令:
ssh user@server "sudo sh \$HOME/save.sh luke leia"
现在我得到这个错误:
sudo: no tty present and no askpass program specified
使用 sudo 触发此脚本而不提示输入 root 密码的最佳方法是什么?我尝试使用-t
,但要求输入 root 密码。有什么想法吗?