Tengo un script que inicia mi máquina vagabunda, abre múltiples terminales y se conecta a la máquina vagabunda a través de ssh en cada terminal recién abierta. Mi problema es que necesito unas cinco terminales y no quiero escribir la contraseña de cada terminal manualmente. ¿Hay alguna manera de que se le solicite la contraseña solo una vez en la terminal principal y use la misma contraseña para el comando 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! ~~~"
Respuesta aceptada:
En general (ignorando vagabundos u otros detalles específicos del sistema), su mejor opción es configurar la autenticación con claves SSH y ejecutar ssh-agent
. Luego abra las sesiones ssh con algo como:
# 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
O, si no puede usar claves, podría armar algo con sshpass
.
read -p "Enter password: " -s SSHPASS ; echo
for x in 1 2 3 ; do
sshpass -e ssh ...
done
unset SSHPASS
Aunque con la terminal en el medio, esto dejaría la contraseña configurada en el entorno de la terminal. Para evitarlo, puede guardar la contraseña temporalmente en un archivo:
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"
Esto todavía no es óptimo ya que existe la posibilidad de que la contraseña llegue al disco, por lo que las claves serían mejores.