Jenkinsからsudoを呼び出す

Jenkinsからsudoを呼び出す

sudo アクセスが制限されているユーザーがいるビルド マシンが 1 台ありますabc。ソース コードをチェックアウトしてビルド スクリプトを実行すると、正常に動作します。ビルド スクリプトには、sudo「sudo: tty が存在せず、askpass プログラムが指定されていません」と表示されない呼び出しが含まれています。しかし、スレーブとして追加されたビルド マシンで Jenkins を使用して同じことを実行すると、「sudo: tty が存在せず、askpass プログラムが指定されていません」と表示されます。

Default requirettyファイル内でコメントアウトするという解決策を 1 つ見つけました/etc/sudoers。しかし、このファイルへのアクセス権がありません。

この問題をどう克服すればいいでしょうか?

答え1

sudoルートパスワードの入力を要求しようとしていますが、疑似 tty が割り当てられていないため、失敗します。

root としてログインするか、/etc/sudoers (または: sudo visudo) で次のルールを設定する必要があります。

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

次に、Jenkins ユーザーがadminグループ (またはwheel) に属していることを確認します。

理想的には(より安全)、ルート権限を次のように指定できる特定のコマンドのみに制限するのがよいでしょう。%admin ALL=(ALL) NOPASSWD:/path/to/program

答え2

2 つのオプションがあります。おっしゃるとおり、/etc/sudoers から設定をコメントアウトするDefaults requirettyか、疑似 tty 割り当て ( -t) 引数を使用しますssh

Jenkins スクリプトで以下を試してください。

ssh -t 127.0.0.1 "sudo command"

ssh既知のホストにエントリを追加するには、事前に共有キーを自分で設定し、手動で 1 回実行する必要がありますが、代わりに-o StrictHostKeyChecking=no引数を追加してsshこれを無視することもできます。

答え3

簡単な方法
ここに画像の説明を入力してください

$ sudo visudo
## Now add the below lines in your sudoers file :
jenkins ALL=(ALL) NOPASSWD: ALL

$service jenkins start

答え4

ssh 経由でコマンドを実行する場合は、「pty で実行」オプションをチェックする必要があります。 ここに画像の説明を入力してください

関連情報