Si estás cansado de escribir la clave una y otra vez cada vez que te conectas a tu servidor favorito, puedes usar certificados para evitarlo.
¿Cómo funciona SSH con certificados?
La configuración de SSH, se encuentra en la carpeta ~/.ssh de cada usuario. En esta carpeta, tendremos los siguientes ficheros:
* id_rsa – Clave privada de este usuario
* id_rsa.pub – Clave pública del usuario
* known_hosts – Host en los que el equipo confía para conectarse (si no la primera vez que nos conectemos, se nos preguntará si confíamos en el host al que queremos conectarnos)
* authorized_keys – En cada línea tenemos las claves públicas a las que permitimos que se conecten a nuestra máquina usando certificados
El formato de authorized_keys es el siguiente:
ssh-rsa AAAAAihhhhhhhhCLAVE_PUBLICA_ETC_ETC
La manera de generar estos ficheros varía si lo hacemos de Linux o desde Windows (ver más adelante)
Caso de ejemplo
Tenemos una máquina cliente «A-Cliente» en la que iniciamo sesión con el usuario «a» y queremos conectarnos a una máquina servidor ssh «B-Servidor» con el usuario «b».
Máquina A-Cliente:
- ~/.ssh/id_rsa – Clave privada
- ~/.ssh/id_rsa.pub – Clave pública que habrá que copiar a authorized_keys de la máquina
Máquina B-Servidor:
- ~/.ssh/authorized_keys – Tendrá una lína con la clave pública de la máquina A-Cliente
¡Atención a los permisos de lectura de la clave privada!
Activar debug en el log de SSH
Para resolver problemas, lo mejor es activar el nivel de debug en el log.
Para ello en
/etc/ssh/sshd_config
debemos añadir la línea
LogLevel DEBUG3
Desde Linux
Iniciar sesión en la máquina A con el usuario a.
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/mykey b@B
Lo anterior es tan sencillo, que nos perdemos lo que está haciendo ssh-copy. Esta instrucción hace lo siguiente:
$ ssh b@B mkdir -p .ssh
$ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
Desde Windows con Putty
Generar claves
Ejecutar PuTTygen:
- Pulsar en «Generate»
- Mover el ratón sobre el espacio en blanco de la ventana para generar el certificado a partir de movimientos aleatorios del ratón
- Pulsar en «Save private key» para guardar la clave privada (usar la extensión ppk y guardar el fichero en un directorio seguro)
Copiar la clave pública al servidor (por ejemplo con WinSCP)
Aquí hay un problema, y es que el formato de generación de claves públicas de Putty no es directamente compatible con las claves de authorized_keys.
La opción más rápida es copiar el texto que aparece en la ventana de PuTTygen en el authorized_keys del usuario con el que nos queremos conectar.
Alternativamente podemos usar el siguiente comando linux:
echo ssh-rsa $(cat publica | tail -n +3 | head -n -1 | tr -d '\n') > clave_publica
cat clave_publica >> $HOME/.ssh/authorized_keys
Donde authorized_keys está en el equipo servidor
Establecer en Putty la clave privada para iniciar sesión
Seleccionar el certificado privado anterior en la configuración de Putty > Connection > SSH > Auth > Private key file for authentication
Desde Windows con WinSCP
Podemos generar las claves como hemos dicho anteriormente, dejando la clave pública en el path $HOME/.ssh/authorized_keys del servidor.
En WinSCP configuramos la clave privada al crear una conexión, pulsando en Avanzado:
Desde Duplicati
Con Duplicati podemos realizar copias de seguridad usando como destino el tipo de almacenamiento SFTP (SSH).
Podemos crear un usuario que solo nos permita conectarnos mediante SSH, que indicaremos en «Nombre de usuario», no indicaremos contraseña y en ssh-key:
sshkey://clave_privada_codificada_modo_url
Para codificar un fichero con la clave privada con el formato
-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----
Podemos usar el siguiente script de bash
rawurlencode() { local string="${1}" local strlen=${#string} local encoded="" local pos c o for (( pos=0 ; pos<strlen ; pos++ )); do c=${string:$pos:1} case "$c" in [-_.~a-zA-Z0-9] ) o="${c}" ;; * ) printf -v o '%%%02x' "'$c" esac encoded+="${o}" done echo "${encoded}" # You can either set a return variable (FASTER) REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p } rawurlencode "$(cat mi.key)"
El resultado de este fichero es el que tendremos que copiar en ssh-key de Duplicati, precedido de sshkey://
Comprobando el fingerprint
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_rsa_key.pub
0 Comments
1 Pingback