web-dev-qa-db-ja.com

Ubuntu 18.04-Sudo:ttyが存在せず、askpassプログラムが指定されていません

ここで/ 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プログラムが指定されていません

何か案は?

ありがとう!

編集:

  1. 私はポストステップジョブでjenkinsマスターマシンからスレーブマシンでbash Sudoコマンドを実行しようとしています(他のスレーブですでに実行されています)。

  2. ジョブを実行すると、次のエラーで失敗しました:Sudo:ttyが存在せず、askpassプログラムが指定されていません。私のデバッグからは、スレーブマシン内のssh経由でSudoコマンドを送信しようとして同じエラーが発生したため、問題はマスターに関連していないようです。

  3. 私の期待はそれを機能させることです。別の軟膏マシンですでに機能していた方法。 (これは、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
1
ShSa

ファイルが順番に読み込まれるという問題。 man sudoersの「SUDOERSファイル形式」セクションをご覧ください:

ユーザーに対して複数のエントリが一致する場合、それらは順番に適用されます。複数の一致がある場合、最後の一致が使用されます(これは必ずしも最も限定的な一致であるとは限りません)。

したがって、最初に次の行を読み取ります。

jenkins ALL=(ALL) NOPASSWD: ALL

そして、jenkinsがパスワードなしでSudoコマンドを実行することを許可します(ちなみに、これはまったく恐ろしい考えのように見えますが、今のところセキュリティは省略しておきましょう)。次に、ファイルの読み取りを続行し、以下を見つけます。

%Sudo   ALL=(ALL:ALL) ALL

jenkinsSudoグループの一部であるため、これはjenkinsにも適用され、NOPASSWDコマンドを上書きします。

1
terdon