Saya memiliki skrip yang menjalankan skrip lain melalui SSH pada server jarak jauh menggunakan sudo. Namun, ketika saya mengetik kata sandi, kata itu muncul di terminal. (Kalau tidak berfungsi dengan baik)
ssh user@server "sudo script"
Apa cara yang tepat untuk melakukan ini sehingga saya bisa mengetikkan kata sandi untuk sudo melalui SSH tanpa kata sandi muncul saat saya mengetik?
ssh <user@server> sudo <script>
, karena saya mendapatkan kesalahansudo: no tty present and no askpass program specified
Jawaban:
Cara lain adalah dengan menggunakan
-t
sakelar kessh
:Lihat
man ssh
:sumber
ssh -t localhost <<< "sudo touch file;"
EDIT Tampaknya penting bahwa Anda benar-benar memberikan perintah sebagai parameter, bukan melalui standar dalam (yang masuk akal di belakang).-t
metode juga akan menunjukkan output berwarna perintah yang biasanya melakukannya.Saya dapat mengotomatisasi sepenuhnya dengan perintah berikut:
Keuntungan:
Mengenai keamanan: seperti yang dikatakan Kurt , menjalankan perintah ini akan menunjukkan kata sandi Anda pada riwayat bash lokal Anda, dan lebih baik menyimpan kata sandi dalam file yang berbeda atau menyimpan semua perintah dalam file .sh dan menjalankannya. CATATAN: File harus memiliki izin yang benar sehingga hanya pengguna yang diizinkan yang dapat mengaksesnya.
sumber
-t
, tetapi aku belum cukup membaca buku panduannya dengan seksama untuk memastikan bahwa kamu bisa melewatinya dua kali! Ini yang saya cari selama berbulan - bulan! Sebagai tambahan keamanan, saya cukup mengatur variabel kata sandi sebelum menjalankanread -s -p "Password: " pw
, lalu melakukannyaecho "$pw" | ....
. Saya sekarang telah menggulung ini menjadi skrip praktis untuk saya sendiri :).Dengan asumsi Anda tidak menginginkan prompt kata sandi :
Contoh
sumber
Sudo melalui SSH yang mengirimkan kata sandi, tidak perlu:
Anda dapat menggunakan sudo lebih dari ssh tanpa memaksa ssh untuk memiliki pseudo-tty (tanpa menggunakan saklar ssh "-t") dengan mengatakan sudo untuk tidak memerlukan kata sandi interaktif dan untuk hanya mengambil kata sandi dari stdin. Anda melakukan ini dengan menggunakan sakelar "-S" pada sudo. Ini membuat sudo mendengarkan kata sandi di stdin, dan berhenti mendengarkan ketika melihat baris baru.
Contoh 1 - Perintah Remote Sederhana
Dalam contoh ini, kami mengirim
whoami
perintah sederhana :Kami memberi tahu sudo untuk tidak mengeluarkan prompt, dan untuk mengambil input dari stdin. Hal ini membuat kata sandi sudo yang lewat benar-benar hening sehingga satu-satunya respons yang Anda dapatkan adalah keluaran dari
whoami
.Teknik ini memiliki manfaat memungkinkan Anda untuk menjalankan program melalui sudo over ssh yang membutuhkan input stdin sendiri. Ini karena sudo mengonsumsi kata sandi melalui baris pertama stdin, lalu membiarkan program apa pun yang dijalankan terus mengambil stdin.
Contoh 2 - Perintah Jauh Yang Membutuhkan stdin Sendiri
Pada contoh berikut, perintah jarak jauh "cat" dijalankan melalui sudo, dan kami menyediakan beberapa baris tambahan melalui stdin untuk ditampilkan oleh kucing jarak jauh.
Keluaran menunjukkan bahwa
<remote_sudo_password>
garis dikonsumsi oleh sudo, dan bahwa kucing yang dieksekusi dari jarak jauh kemudian menampilkan garis ekstra.Contoh di mana ini akan bermanfaat adalah jika Anda ingin menggunakan ssh untuk meneruskan kata sandi ke perintah istimewa tanpa menggunakan baris perintah. Katakanlah, jika Anda ingin memasang wadah terenkripsi jauh melalui ssh.
Contoh 3 - Memasang Wadah VeraCrypt Jarak Jauh
Dalam contoh skrip ini, kami sedang memasang wadah VeraCrypt dari jarak jauh melalui sudo tanpa teks tambahan yang diminta:
Perlu dicatat bahwa dalam semua contoh baris perintah di atas (semuanya kecuali skrip)
<< EOF
konstruk pada baris perintah akan menyebabkan semua yang diketik, termasuk kata sandi, direkam dalam sejarah .bash_history mesin lokal . Oleh karena itu sangat disarankan bahwa untuk penggunaan di dunia nyata Anda menggunakan melakukannya sepenuhnya melalui skrip, seperti contoh veracrypt di atas, atau, jika pada baris perintah maka masukkan kata sandi dalam file dan arahkan file tersebut melalui ssh.Contoh 1a - Contoh 1 Tanpa Kata Sandi Baris Perintah Lokal
Contoh pertama akan menjadi:
Contoh 2a - Contoh 2 Tanpa Kata Sandi Baris Perintah Lokal
dan contoh kedua akan menjadi:
Memasukkan kata sandi dalam file terpisah tidak perlu jika Anda memasukkan semuanya ke dalam skrip, karena isi skrip tidak berakhir dalam riwayat Anda. Meskipun demikian, ini mungkin masih berguna, jika Anda ingin mengizinkan pengguna yang tidak melihat kata sandi untuk menjalankan skrip.
sumber
cat
dan mengirimkan hasilnya ke sudo? Bisakah Anda menggunakansudo
perintah remote ssh utama?cat
digunakan untuk menyalurkan kata sandi pengguna melalui sudo di sisi lain. Jika pengguna dapat menjalankan sudo tanpa kata sandi, maka itu tidak diperlukan, tetapi saya tidak menyarankan konfigurasi ini. Alasannya disalurkan adalah untuk mencegah kata sandi muncul di baris perintah sysrtem jarak jauh. Baris perintah tidak aman, setiap pengguna dapat melihat setiap baris perintahps auxwww
.cat
perintah sshcat \| sudo --prompt="" -S...
. Jika-S
kekuatansudo
untuk membaca kata sandi dari stdin, apakah kucing dan pipa diperlukan sama sekali? Mungkinkah perintah ssh begitu sajasudo --prompt="" -S...
?Cara terbaik adalah
ssh -t user@server "sudo <scriptname>"
, misalnyassh -t user@server "sudo reboot"
. Ini akan meminta kata sandi untuk pengguna terlebih dahulu dan kemudian melakukan root (karena kita menjalankan skrip atau perintah dengan privilege root.Saya harap ini membantu dan menghilangkan keraguan Anda.
sumber
NOPASS
dalam konfigurasi pada mesin target Anda adalah solusinya. Lanjutkan membaca di http://maestric.com/doc/unix/ubuntu_sudo_without_passwordsumber
sumber
Saya menghadapi masalah,
Lalu aku mencoba
tidak bekerja
itu bekerja dengan baik!
sumber
Bergantung pada penggunaan Anda, saya berhasil dengan yang berikut:
Ini akan meminta kata sandi root dan kemudian menjalankan perintah dengan benar.
sumber