Mám skript, který spustí můj tulákový stroj, otevře více terminálů a připojí se k vagrantskému stroji přes ssh v každém nově otevřeném terminálu. Můj problém je, že potřebuji asi pět terminálů a nechci zadávat heslo pro každý terminál ručně. Existuje způsob, jak dostat výzvu k zadání hesla pouze jednou v hlavním terminálu a použít stejné heslo pro příkaz 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! ~~~"
Přijatá odpověď:
Obecně (ignorujte vagrant nebo jiné podrobnosti specifické pro systém) nejlépe uděláte, když nastavíte ověřování pomocí klíčů SSH a spustíte ssh-agent
. Poté otevřete ssh relace s něčím jako:
# 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
Nebo, pokud nemůžete používat klíče, můžete něco nastavit pomocí sshpass
.
read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do
sshpass -e ssh ...
done
unset SSHPASS
Ačkoli s terminálem uprostřed, zůstane heslo nastavené v prostředí terminálu. Chcete-li to obejít, můžete heslo dočasně uložit do souboru:
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"
To stále není optimální, protože existuje šance, že se heslo dostane na disk, takže klíče by byly lepší.