Panggil sudo dari Jenkins


8

Saya punya satu mesin build yang memiliki pengguna abcyang memiliki akses sudo terbatas. Ketika saya memeriksa kode sumber dan menjalankan skrip build saya, itu berfungsi dengan baik. Skrip build berisi sudopanggilan yang tidak tertulis "sudo: tidak ada tty yang ada dan tidak ada program askpass yang ditentukan". Tetapi ketika saya melakukan hal yang sama dengan Jenkins pada mesin build yang ditambahkan sebagai slave, itu menunjukkan "sudo: tidak ada tty dan tidak ada program askpass yang ditentukan".

Saya telah menemukan satu solusi yang mengatakan komentar Default requirettydi file /etc/sudoers. Tetapi saya tidak memiliki akses ke file ini.

Bagaimana saya bisa mengatasi masalah ini?


Apakah perintah yang Anda coba jalankan sudodiizinkan untuk dijalankan tanpa memasukkan kata sandi? Jika Anda harus memasukkan kata sandi, sudo akan membutuhkan tty.
Patrick

Ya .. itu berjalan tanpa memasukkan kata sandi
Niraj

Jawaban:


3

Ada dua opsi, komentari Defaults requirettypengaturan dari / etc / sudoers seperti yang Anda sebutkan atau gunakan -targumen pseudo-tty alokasi ( ) untuk ssh.

Coba yang berikut ini dalam skrip jenkins Anda:

ssh -t 127.0.0.1 "sudo command"

Meskipun Anda harus sshmengkonfigurasi kunci yang dibagikan sebelumnya untuk Anda sendiri dan menjalankannya sekali secara manual untuk menambahkan entri ke host yang dikenal, sebagai alternatif tambahkan -o StrictHostKeyChecking=noargumen sshuntuk mengabaikannya.


2

Gagal, karena sudomencoba meminta kata sandi root dan tidak ada pseudo-tty yang dialokasikan.

Anda harus masuk sebagai root atau mengatur aturan berikut di /etc/sudoers (atau sudo visudo:):

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

Kemudian pastikan bahwa pengguna Jenkins Anda milik admingrup (atau wheel).

Idealnya (lebih aman) adalah membatasi hak root hanya untuk perintah tertentu yang dapat ditentukan sebagai %admin ALL=(ALL) NOPASSWD:/path/to/program


2
Masih membutuhkan TTY.
Lightness Races dalam Orbit

0

Jika Anda menjalankan perintah melalui ssh, Anda perlu memeriksa opsi "Exec in pty". masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.