Shell-Script

如何輸入多個視窗的密碼?

  • September 5, 2016

我有一個腳本可以啟動我的 vagrant 機器,打開多個終端並在每個新打開的終端中通過 ssh 連接到 vagrant 機器。我的問題是我需要大約五個終端,我不想手動輸入每個終端的密碼。有沒有辦法在主終端中只提示一次密碼,並為 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 vagrant@localhost -p 2222" --$
done
gnome-terminal --window-with-profile=git          
clear
echo "~~~ Have fun! ~~~"

通常(忽略 vagrant 或其他特定於系統的詳細資訊)您最好的選擇是使用 SSH 密鑰設置身份驗證,然後執行ssh-agent. 然後使用以下內容打開 ssh 會話:

# 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

或者,如果你不能使用密鑰,你可以用sshpass.

read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do 
   sshpass -e ssh ...
done
unset SSHPASS

儘管終端位於中間,但這會將密碼設置留在終端環境中。要解決此問題,您可以將密碼臨時保存在文件中:

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"

這仍然不是最佳選擇,因為密碼有可能會命中磁碟,因此密鑰會更好。

引用自:https://unix.stackexchange.com/questions/307937