Menjalankan 'sudo' di atas SSH

8

Saya sedang menulis skrip yang akan masuk ke sekelompok mesin remote dan menjalankan perintah pada mereka. Saya telah menyiapkan kunci agar pengguna yang menjalankan skrip tidak harus mengetikkan kata sandi setiap mesin, tetapi hanya mengetikkan frasa sandi di awal skrip.

Masalahnya adalah bahwa perintah pada mesin jarak jauh perlu sudodijalankan. Dan pada saat yang sama seluruh inti dari skrip adalah untuk menghilangkan pengguna karena harus mengetikkan kata sandi beberapa kali. Adakah cara untuk menghindari mengetik kata sandi sudo? Mengubah izin perintah pada mesin jarak jauh bukanlah suatu opsi.

vahidg
sumber

Jawaban:

8

Untuk sudo Anda dapat mengizinkan pengguna untuk menjalankan sudo tanpa meminta kata sandi, coba man sudoers. Anda dapat mengedit file /etc/sudoersdengan mengeluarkan visudoperintah. Itu harus istimewa karena jika file tidak dimuat ulang dengan benar. Baris yang dihasilkan (diambil dari contoh di dalam file itu sendiri) seharusnya:

## Allows people in group wheel to run all commands
# %wheel    ALL=(ALL)   ALL

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
DaDaDom
sumber
Terima kasih. Lucu karena kolega saya mengusulkan solusi di baris yang sama dengan ini, tepat sebelum Anda memposting jawaban Anda. Bisakah Anda menambahkan bahwa file yang akan diedit /etc/sudoersdan itu juga dapat diedit dengan menjalankansudo /usr/sbin/visudo
vahidg
8
Jika Anda tahu perintah yang ingin Anda jalankan, Anda mungkin tidak ingin menentukan SEMUA perintah .. Sedikit celah keamanan, Anda tahu.
Tom O'Connor
3
@ Tom O'Connor: Ya, saya hanya memberikan perintah yang diperlukan. Akan memberi contoh di sini demi kelengkapan:%wesho ALL=NOPASSWD: /sbin/service httpd
vahidg
Ah, cukup adil. :)
Tom O'Connor
7

@Wo,

Anda dapat melakukan apa yang dikatakan DaDaDom (ini akan berhasil dan sederhana) atau Anda mungkin ingin meningkatkan pengaturan Anda dengan menggunakan modul PAM yang disebut pam-ssh-agent-auth .

Proses untuk sistem Debian / Ubuntu cukup sederhana:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

Edit konfigurasi sudo:

$ sudo visudo

Tambahkan yang berikut ini:

Defaults env_keep += SSH_AUTH_SOCK

Lanjutkan dengan mengubah pengaturan PAM sudo:

$ sudo vi /etc/pam.d/sudo

Tambahkan baris auth tepat di atas 2 baris yang disertakan @ sertakan :

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
@include common-account

Voa!

sudo tanpa auth tetapi mengandalkan SSH Agent untuk melakukan otentikasi yang kuat, bukan hanya menghapus kata sandi dari konfigurasi sudo.

Andre de Miranda
sumber
1
Anda mungkin juga ingin memeriksa ini
Andre de Miranda
1
authorized_keysHARUS dikunci sehingga hanya root yang bisa mengubahnya - jika tidak, Anda mungkin menonaktifkan kata sandi.
ijk
2

Jawaban Andre de Miranda memberikan solusi yang bagus menggunakan pam_ssh_agent_auth , tetapi bagian-bagiannya sudah ketinggalan zaman. Terutama /etc/pam.d/sudoinstruksi ketika menggunakan banyak versi Linux saat ini.

Jika Anda menjalankan Ubuntu 12.04 dengan tepat, saya sebenarnya telah menyederhanakan prosesnya dengan memberikan pam_ssh_agent_auth yang dibuat dari ppa: ppa: cpick / pam-ssh-agent-auth .

Anda dapat menginstal paket dengan menjalankan:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

Setelah instalasi, jika Anda ingin menggunakan modul PAM ini dengan sudo Anda harus mengkonfigurasi pengaturan sudo dan konfigurasi PAM, di Ubuntu 12,04 tepatnya Anda dapat melakukannya dengan membuat dua file berikut:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Jika Anda menggunakan chef, proses di atas dapat diotomatiskan dengan buku masak saya, ditemukan di salah satu dari dua lokasi berikut:
https://github.com/cpick/pam-ssh-agent-auth
http: //community.opscode .com / buku masak / pam-ssh-agent-auth .

Direktori buku masak filesberisi /etc/pam.d/sudodan /etc/sudoers.d/pam-ssh-agent-authfile - file yang dijelaskan di atas yang bekerja dengan Ubuntu 12.04 tepat dan harus menjadi titik awal yang bermanfaat ketika menggunakan versi / distro lain.

Chris Pick
sumber