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 :
$ ssh user@server cat \| sudo --prompt="" -S -- whoami << EOF
> <remote_sudo_password>
root
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.
$ ssh user@server cat \| sudo --prompt="" -S -- "cat" << EOF
> <remote_sudo_password>
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
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:
#!/bin/sh
ssh user@server cat \| sudo --prompt="" -S -- "veracrypt --non-interactive --stdin --keyfiles=/path/to/test.key /path/to/test.img /mnt/mountpoint" << EOF
SudoPassword
VeraCryptContainerPassword
EOF
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:
$ cat text_file_with_sudo_password | ssh user@server cat \| sudo --prompt="" -S -- whoami
root
Contoh 2a - Contoh 2 Tanpa Kata Sandi Baris Perintah Lokal
dan contoh kedua akan menjadi:
$ cat text_file_with_sudo_password - << EOF | ssh va1der.net cat \| sudo --prompt="" -S -- cat
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
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.
ssh <user@server> sudo <script>
, karena saya mendapatkan kesalahansudo: no tty present and no askpass program specified