Saya mencoba menjalankan perintah melalui SSH seperti ini di dokumen-sini:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Yang biasanya berfungsi kecuali ketika saya mencoba menjalankan sesuatu yang membutuhkan input, seperti kata sandi untuk sudo. Dalam hal ini, saya menerima pesan berikut:
sudo: no tty present and no askpass program specified
Saya tahu saya bisa menggunakan -t
bendera pada SSH untuk mengalokasikan pseudo-tty seperti ini:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
Dan itu akan berhasil, tetapi ketika saya mencoba hal yang sama dengan dokumen di sini, itu tidak berfungsi dan saya akan mendapatkan kesalahan yang sama tentang tidak hadirnya:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Adakah yang tahu bagaimana saya bisa membuat ini bekerja?
Juga, jika Anda bertanya-tanya mengapa saya ingin itu bekerja dengan dokumen-sini daripada hanya meneruskannya pada baris yang sama, itu karena perintah input (mungkin ada beberapa) berasal dari file konfigurasi yang dibaca oleh skrip dan saya sudah mendengarnya menghindari kesulitan melarikan diri dari perintah untuk tanda kutip, tanda kutip ganda, dll.
Mengapa tidak menyimpan saja dokumen di sini dalam variabel yang akan diberikan
ssh -t
sebagai argumen perintah.Pada catatan yang lebih umum, gunakan
ssh -T
atau tentukan shell jarak jauh sebagai argumen perintah jika stdin dari host jarak jauh sedang dialihkan dari heredoc (untuk mencegahssh
mencoba mengalokasikan pty).sumber