sudo ssh non-interaktif ... meminta kata sandi dalam teks biasa

9

Saya menjalankan beberapa perintah ssh non-interaktif. Otentikasi ssh diurus dengan baik melalui agen ssh, tetapi jika saya menjalankan perintah yang memerlukan sudo maka prompt kata sandi di terminal saya adalah teks biasa. Sebagai contoh:

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

akan meminta saya untuk kata sandi dalam teks biasa. Adakah yang tahu bagaimana saya bisa mendapatkannya menggunakan prompt aman normal atau bahwa saya bisa meneruskan kata sandi melalui saklar? (saat itu saya dapat mengatur prompt aman di sisi ini sebelum saya mengirim perintah)

Bantuan apa pun sangat kami hargai.

Iain
sumber

Jawaban:

13

Gunakan ssh -t:

ssh

-t   Force pseudo-tty allocation. This can be used to execute arbitrary 
     screen-based programs on a remote machine, which can be very useful, 
     e.g. when implementing menu services. Multiple -t options force tty 
     allocation, even if ssh has no local tty.

Jadi perintahmu adalah

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

Jika Anda tidak ingin memasukkan kata sandi, Anda dapat (jika diizinkan) memodifikasi sudoersmenggunakan perintah visudo.

Tambahkan parameter NOPASSWD:, misalnya

username ALL=(ALL) NOPASSWD: /bin/mkdir

Jika Anda tidak dapat mengedit / etc / sudoers, Anda dapat menggunakan sudo -S:

man sudo

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

Dengan itu, perintah akan menjadi

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

Ingatlah bahwa ini akan menambah kata sandi Anda ke sejarah perintah shell Anda (dengan bash, itu akan menjadi ~/.bash_historyfile).

Olli
sumber