Saya memiliki skrip yang memulai mesin gelandangan saya, membuka banyak terminal dan menghubungkan ke mesin gelandangan melalui ssh di setiap terminal yang baru dibuka. Masalah saya adalah saya membutuhkan sekitar lima terminal, dan saya tidak ingin mengetikkan kata sandi untuk setiap terminal secara manual. Apakah ada cara untuk mendapatkan kata sandi hanya sekali di terminal utama, dan menggunakan kata sandi yang sama untuk perintah ssh?
#!/bin/bash
cd /home/kkri/public_html/freitag/vagrant
vagrant up
for run in $(seq 1 $1)
do
gnome-terminal --window-with-profile=dark -e "ssh [email protected] -p 2222" --$
done
gnome-terminal --window-with-profile=git
clear
echo "~~~ Have fun! ~~~"
Jawaban yang Diterima:
Secara umum (mengabaikan gelandangan atau detail khusus sistem lainnya) cara terbaik Anda adalah mengatur otentikasi dengan kunci SSH, dan menjalankan ssh-agent
. Kemudian buka sesi ssh dengan sesuatu seperti:
# load the key to the agent with a 10 s timeout
# this asks for the key passphrase
ssh-add -t10 ~/.ssh/id_rsa
for x in 1 2 3 ; do
ssh ....
done
Atau, jika Anda tidak dapat menggunakan kunci, Anda dapat memasang sesuatu dengan sshpass
.
read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do
sshpass -e ssh ...
done
unset SSHPASS
Meskipun dengan terminal di tengah, ini akan membuat kata sandi disetel di lingkungan terminal. Untuk mengatasinya, Anda dapat menyimpan kata sandi untuk sementara di file:
read -p "Enter password: " -s SSHPASS ; echo
PWFILE=~/.ssh/secret_password
cat <<< "$SSHPASS" > "$PWFILE"
unset SSHPASS
for x in 1 2 3 ; do
sshpass -f "$PWFILE" ssh ...
done
shred --remove "$PWFILE"
Ini masih belum optimal karena ada kemungkinan kata sandi masuk ke disk, jadi kuncinya akan lebih baik.