Saya memiliki skrip shell interaktif, yang di satu tempat perlu ssh ke komputer lain (berbasis Ubuntu) dan menjalankan sesuatu sebagai root (pengguna harus memasukkan kata sandinya, tetapi perintah jarak jauh harus dijalankan seperti yang dicatat dalam skrip):
# ...
ssh remote-machine 'sudo ls'
# ...
Namun, saya selalu mendapatkan pesan kesalahan ini kembali:
sudo: no tty present and no askpass program specified
Oke, itu cukup jelas. Tetapi bagaimana saya bisa mengelak dari ini? Sesuatu seperti ini harus terjadi:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
output akan berisi akhiran \ r \ n misalnya.ls | cat
akan melakukan - itu akan melihat bahwa stdout adalah pipa. Dalam pertanyaan khusus ini, itu tidak relevan, karena tampaknya dimaksudkan untuk dijalankan secara interaktif dari terminal - jadi Anda mungkin ingin kolom dan warna dan yang lainnya.Metode ini akan menjalankan skrip tunggal menggunakan sudo setelah ssh:
Mari kita asumsikan kita memiliki pengguna "jarak jauh" dengan kemampuan sudo dan kita memiliki skrip yang ingin kita jalankan sebagai root.
1) Atur skrip di / etc / passwd untuk digunakan saat login:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) Di dalam "login.sh", kita menjalankan skrip yang ingin kita jalankan sebagai "sudo":
Biasanya ia akan menanyakan kata sandi dua kali: ssh login + sudo. Jika Anda hanya ingin memasukkannya sekali, coba sudo tanpa kata sandi (tidak disarankan). <- silakan baca komentar Boldewyn.
Keuntungan utama adalah "ssh" tidak memerlukan parameter lain (as -t), dan sudo dipaksakan di sisi server. Juga, begitu skrip keluar, pengguna juga keluar.
Mungkin tidak elegan, tetapi sederhana dan berhasil.
sumber
sudoers
file di server seperti ini adalah bencana yang menunggu untuk terjadi. Jika ada yang mendapatkan akses sebagai pengguna Anda (misalnya melalui server web), ia dapat langsung menjadi root. Terima kasih, tetapi saya sedang mencari solusi, yang tidak menempatkan konfigurasi server saya bertentangan. Jika Anda memiliki solusi, yang entah bagaimana secara ajaib menggunakan kembali otentikasi dari SSH untuksudo
perintah, saya akan lebih tertarik (dan mungkin akan mulai mencari penggantian untuk SSH ...).Anda dapat menjalankan perintah berikut untuk mendapatkan akses root tanpa interaktivitas:
sumber