わかりました、ここにトリッキーな質問があります:
まず、Unixマシンで実行される非常に小さなCアプリケーションがあります。このアプリケーションは2つの引数を取得し、次のように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.";
- 私のフォルダ「どこか」はrootに属しているので、通常、私の「ユーザー」はそれを保存できません。そこで、代わりにこのコマンドを処理するようにアプリケーションのコードを変更しました。
ssh user@server "sudo sh \$HOME/save.sh luke leia"
今、私はこのエラーを受け取ります:
sudo: no tty present and no askpass program specified
sudoを使用してこのスクリプトをトリガーし、rootパスワードの入力を求められないようにするための最良の方法はどれですか?を使ってみ-t
ましたが、rootパスワードを聞かれます。何かご意見は?