Saya pikir apa yang Anda minta tidak mudah dilakukan, bahkan mungkin tidak mungkin dengan scripting bash dasar.
Karenanya, berikut ini tidak benar-benar menjawab pertanyaan Anda tetapi memberikan pendekatan lain untuk masalah Anda.
Alih-alih menggunakan sshpass
, Anda bisa menggunakan scp
perintah biasa dengan otentikasi publickey tanpa kata sandi. Lihat [1] jika Anda tidak tahu apa itu.
Jika Anda bermaksud menggunakan skrip dalam skrip untuk penggunaan lokal , inilah, IMO cara untuk melakukannya:
- buat publickey tanpa kata sandi
- gunakan
ssh-copy-id
untuk menambahkan kunci publik Anda ke server
Itu sudah cukup untuk dapat menjalankan perintah Anda tanpa prompt:
scp -r [email protected]:/cmshome/me/file /home/me/Desktop
Untuk skrip yang ingin Anda bagikan , sshpass dengan kata sandi yang jelas tentu bukan ide yang baik, Anda setidaknya harus menggunakan bendera "-e" sshpass dan membiarkan pengguna memberikan kata sandi sebagai variabel lingkungan untuk keamanan yang lebih baik.
Dalam hal ini, pendekatan publickey sedikit kurang nyaman tetapi masih mungkin. Jika Anda tidak mampu meminta pengguna skrip untuk membuat kunci publik, Anda dapat membuat kunci publik dengan cepat, menyalinnya di server dan menjalankannya scp
tanpa diminta:
#!/bin/bash
KEY="$HOME/.ssh/id_rsa_example"
if [ ! -e "$KEY" ]; then
ssh-keygen -t rsa -N "" -f "$KEY"
sshpass -e ssh-copy-id -i "${KEY}.pub" [email protected]
fi
scp -r [email protected]:/cmshome/me/file /home/me/Desktop
Akhirnya, masih ada kemungkinan untuk digunakan rsync
untuk membuat bilah kemajuan:
$ rsync -P --rsh="sshpass -p $PASSWORD ssh -l me8" host.ca:/cmshome/me/file /home/me/Desktop
[1] https://help.ubuntu.com/community/SSH/OpenSSH/Keys