「hostname」(sudoersコンテンツ)で次のようにユーザー(myuser)にSudoを設定しました。
Cmnd_Alias SCRIPT =/path/script * myuser ALL =(suser)NOPASSWD:SCRIPT
これは正常に機能するため、パスワードを必要とせずに、ホスト名にmyuserとしてローカルにログインして次を実行できます。
Sudo -u suser/path/script
ただし、次のように、ssh(キーが設定されているためパスワードは不要)を使用してログインして実行すると、次のようになります。
sshホスト名Sudo-u suser/path/script
パスワードの入力を求められ、パスワードを入力すると次のようになります。
申し訳ありませんが、ユーザーmyuserはホスト名でsuserとして「/ path/script」を実行できません
[〜#〜] update [〜#〜]この問題は、sudoersのコマンドの末尾から「*」を削除することで解決されます。 *は、パラメーターをスクリプトに渡すことができるようにするために追加されましたが、実際には必要ないようです。 *がSudoをローカルで動作させるが、sshを超えて動作させない理由はまだわかりません。だから質問はまだ立っています
Sudoersでホストを指定しなかったため、現在セットアップされているため、ローカルでのみ機能します。
したがって、HostパラメーターをALLに設定すると、どのホストでも機能します。
からman sudoers:
予約語ALLは、常に一致を成功させる組み込みのエイリアスです。これは、Cmnd_Alias、User_Alias、Runas_Alias、またはHost_Aliasを使用する可能性のある場所であればどこでも使用できます。
.。
デフォルトでは、NOPASSWDタグが現在のホスト上のユーザーのいずれかのエントリに適用されている場合、そのユーザーはパスワードなしでSudo-lを実行できます。さらに、ユーザーは、現在のホストに関連するすべてのユーザーのエントリにNOPASSWDタグが存在する場合にのみ、パスワードなしでSudo-vを実行できます。この動作は、verifypwおよびlistpwオプションを介してオーバーライドできます。
以下が端末で機能するという追加の事実は、ホストがプロンプトを表示する理由であることを裏付けているようです。
$ sshホスト名
$ Sudo -u user/path/script
Sudoersファイルに表示している構文が正しくないため、visudoではその構文でファイルを作成できません。それは次のようなものでなければなりません
testuser hostname=(user) NOPASSWD: /path/script*
この構文を使用すると、パスワードを要求されることなく、ホスト名にSSHで接続し、スクリプトを実行できます。
[〜#〜]編集[〜#〜]
コメントを読んだところ、sudoersファイルの設定に誤りがあるようです。これは、行のHost_Aliasまたはホスト名指定の部分と関係があるように見えます。
CentOS 6システムでテストユーザーを設定し、さまざまな構成を試しましたが、ローカルにログインすると機能するテストユーザーが見つかりませんが、ssh経由で試行するとアクセスが拒否されます。