JenkinsからSudoコマンドを実行すると、次のエラーが発生します。
Sudo:ttyが存在せず、askpassプログラムが指定されていません
ユーザーjenkinsの実行を許可する/etc/sudoers
ファイルにNOPASSWD
エントリを追加することでこれを解決できることを理解していますパスワードを必要としないコマンド。次のようなエントリを追加できます。
%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh
...しかし、これは次の問題につながります: sudoersファイルでフルパスを指定しないようにする方法
次のようなエントリを追加できます。
%jenkins ALL=NOPASSWD: ALL
...しかし、これはユーザーjenkinsがすべてのコマンドのパスワードプロンプトを回避できるようにします。これは少し安全ではないようです。ここに私の選択肢が何であるかを知りたいだけで、ベストプラクティスがある場合は検討する必要があります。
man sudoers
からこのオプションを探していると思います
requiretty If set, Sudo will only run when the user is logged in to a real tty. When this flag
is set, Sudo can only be run from a login session and not via other means such as
cron(8) or cgi-bin scripts. This flag is off by default.
ここでは、最も安全なものから最も安全でないものの順に私の推奨事項を示します。
1)jenkins Sudoをまったくさせない。パッケージをビルドしている場合は、fakeroot
を調べてください。 jenkinsは、ソフトウェアをビルドするためにrootを必要としません。
2)do rootを持つためにjenkinsが必要な場合は、sudoers Cmnd
オプションを使用してSudo機能を制限することを検討してください。
3)使い捨てVMでjenkinsを実行します。誰かがそれを根付いた場合は、それを再構築し、セキュリティの選択肢を再評価してください。また、LANまたはVPN経由でのみアクセス可能なイントラネットサービスとしてjenkinsを実行することをお勧めします。認証を含めることを忘れないでください!
スクリプトの一部としてjenkinsユーザーとしてSudoを実行する場合、2つのものが必要です。
コマンドの正確なコピー.//bin/chown www-data/var/wwwなど
Sudo -n exactコマンド
-nは、NOPASSWDの場合、プロンプトを要求しないように指示します。
これは、ジェンキンスが呼び出すスクリプトでSudoを実行するために私を修正しました