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
これを無視することもできます。