Introducción
SSH Master Password es una idea que surge del problema de tener que memorizar o apuntar la contraseña de varios servidores. El tener las contraseñas apuntadas en un block de notas o en un correo electrónico resulta pesado e inseguro.
El problema
Estos scripts cubren los siguientes problemas:
- No escribir la contraseña de cada servidor para poder loguearse: Almacena los usuarios, dirección de servidor y contraseñas en un archivo de configuración.
- Tener las contraseñas en texto plano: Las contraseñas están encriptadas.
- Memorizar múltiples contraseñas: Las contraseñas son encriptadas con una o varias llaves.
- Restricción para usar una llave ssh previamente compartida.
Dependencias
Los scripts tienen las siguientes dependencias:
- Expect: Permite interactuar automáticamente con el programa ssh.
- OpenSSL: Encripta y desencripta las contraseñas.
Expect Script masterssh
#!/usr/bin/expect -f set user [lrange $argv 0 0] set alias [lrange $argv 1 1] set mypassword [exec getfrommasterpassword.sh $alias $user] set host [lindex $mypassword 0] set password [lindex $mypassword 1] set timeout -1 match_max 100000 spawn /usr/bin/ssh $user@$host expect { "yes?no" { send -- "yes\r" exp_continue } "password" { send -- "$password\r" } } send -- "\r" interact
Script getfrommasterpassword.sh
#!/bin/bash cd `dirname "$0"` HOST_ALIAS=$1 HOSTS_FILE=${3:-"~/.passwords.txt"} USERNAME=${2:-"root"} LINEMATCH=$(egrep "^$HOST_ALIAS " "$HOSTS_FILE" | grep "$USERNAME") HOST=$(echo $LINEMATCH | awk '{print $3}') PASSWORD=$(echo $LINEMATCH | awk '{print $4}') PASSWORD=$(echo "$PASSWORD"|openssl des -d -a ) echo $HOST $PASSWORD
Ejmplo passwords.txt
#alias usuario ip/hostname PasswordEncriptado servidor1 root 192.168.100.1 U2FsdGVkX1/N1E4jydOhGb9S8KXBuhocQnE1PD5ddAM= servidor2 root 192.168.100.2 U2FsdGVkX1+AaGic90We22DzNfb2HJRll2xlWPsvbuA= servidor3 otro nomb.comp.com U2FsdGVkX1+BZ90Go6zEOcgKnjUylJXvwAu9W/QjulI=
Encriptar las contraseñas
Para encriptar el password que se usa en un servidor (<MIPASSWORD>) con la llave <MILLAVE>, bastará ejecutar en la línea de comando:
openssl des -e -a -A -k "<MILLAVE>" <<< "<MIPASSWORD>"
El output de ese comando es <MIPASSWORD> encriptado, y es el que se usa en el archivo de passwords.
Instalación y uso
- Crear los dos scripts en ~/bin/
- Crear y modificar el archivo ~/.passwords.txt con las contraseñas encriptadas.
- Uso: masterssh <USUARIO> <ALIAS>
- Nota: <USUARIO> y <ALIAS> deben existir en el archivo de passwords.




