ここで/ etc/sudoersファイルについて説明する前に、それは次のとおりです。
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
jenkins ALL=(ALL) NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group Sudo to execute any command
%Sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
最初は、リモートでSudoコマンドを実行しようとしていました。 visudoを使用してsudoersファイルを編集し、jenkinsユーザーがパスワードを要求せずにSudoコマンドを実行できるようにしました。
(jenkinsユーザーとしてログオンしたときに)実行しようとした別の問題があることに気づいたら、次のように実行しました:ssh localhost "Sudo w"それでも機能しません。
このエラーの発生:Sudo:ttyが存在せず、askpassプログラムが指定されていません
何か案は?
ありがとう!
編集:
私はポストステップジョブでjenkinsマスターマシンからスレーブマシンでbash Sudoコマンドを実行しようとしています(他のスレーブですでに実行されています)。
ジョブを実行すると、次のエラーで失敗しました:Sudo:ttyが存在せず、askpassプログラムが指定されていません。私のデバッグからは、スレーブマシン内のssh経由でSudoコマンドを送信しようとして同じエラーが発生したため、問題はマスターに関連していないようです。
私の期待はそれを機能させることです。別の軟膏マシンですでに機能していた方法。 (これは、shostコマンドでlocalhostを指定してSudoコマンドを送信することにより、他のスレーブマシン内でも同じロジックをテストします---うまくいきました
sshを介したSudoコマンドにはttyがないようです...私はTTYやSSHの専門家ではありません。多分私は何かが足りない...
解決済み!バグだと思います...
この行を/ etc/sudoersの最後に移動し、うまくいきました!
jenkins ALL=(ALL) NOPASSWD: ALL
したがって、ファイルは次のようになります。
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group Sudo to execute any command
%Sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
jenkins ALL=(ALL) NOPASSWD: ALL
ファイルが順番に読み込まれるという問題。 man sudoers
の「SUDOERSファイル形式」セクションをご覧ください:
ユーザーに対して複数のエントリが一致する場合、それらは順番に適用されます。複数の一致がある場合、最後の一致が使用されます(これは必ずしも最も限定的な一致であるとは限りません)。
したがって、最初に次の行を読み取ります。
jenkins ALL=(ALL) NOPASSWD: ALL
そして、jenkins
がパスワードなしでSudoコマンドを実行することを許可します(ちなみに、これはまったく恐ろしい考えのように見えますが、今のところセキュリティは省略しておきましょう)。次に、ファイルの読み取りを続行し、以下を見つけます。
%Sudo ALL=(ALL:ALL) ALL
jenkins
はSudo
グループの一部であるため、これはjenkins
にも適用され、NOPASSWD
コマンドを上書きします。