abc
sudoアクセスが制限されたユーザーを持つビルドシステムがあります。ソースコードを確認してビルドスクリプトを実行すると、正常に動作します。ビルドスクリプトにsudo
指定されていない呼び出し「sudo:ttyが存在せず、Askpassプログラムが指定されていません」が含まれています。ただし、スレーブとして追加されたビルドマシンでJenkinsと同じ操作を実行すると、「sudo:ttyが存在せず、Askpassプログラムが指定されていません」というメッセージが表示されます。
Default requiretty
ファイル内でコメントを付けるための解決策が見つかりました/etc/sudoers
。ただし、ファイルにアクセスできません。
この問題をどのように克服できますか?
答え1
sudo
ルートパスワードの入力を求めようとしましたが、擬似ttyが割り当てられていないため失敗しました。
/etc/sudoers
rootとしてログインするか(or:)で次のルールを設定する必要がありますsudo visudo
。
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
次に、Jenkinsユーザーがadmin
グループ(またはwheel
)に属していることを確認します。
理想的には(より安全に)、root権限を次のように指定できる特定のコマンドに制限します。%admin ALL=(ALL) NOPASSWD:/path/to/program
答え2
2つのオプションがあります。前述のように、Defaults requiretty
/etc/sudoersの設定をコメントアウトするか、pseudo-tty割り当て(-t
)パラメータを使用しますssh
。
Jenkinsスクリプトで次のことを試してください。
ssh -t 127.0.0.1 "sudo command"
既知のホストにエントリを追加するには、事前ssh
共有キーを直接設定して手動で一度実行する必要がありますが、パラメータを追加してそれを上書きすることもでき-o StrictHostKeyChecking=no
ますssh
。