web-dev-qa-db-ja.com

ジェンキンスからスドに電話する

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

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

この問題を解決するにはどうすればよいですか?

8
Niraj

2つのオプションがあります。前述のように、/ etc/sudoersのDefaults requiretty設定をコメント化するか、sshに疑似tty割り当て(-t)引数を使用します。

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

ssh -t 127.0.0.1 "Sudo command"

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

3
geedoubleya

Sudoがrootパスワードでプロンプトを表示しようとしているため、疑似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として指定できる特定のコマンドのみにroot権限を制限することです

2
kenorb

Ssh経由でコマンドを実行している場合は、「Exec in pty」オプションを確認する必要があります。 enter image description here

0
Sanny Patel