- Validar si existe alguna llave
- Generar un nuevo par llave
- Copiar la llave Publica
- Entrar al host sin password
- Deshabilitar la autenticacion en el host remoto
- Agregando mas seguridad
Validar si existe llave
ls -al ~/.ssh/*.pub
Si existe llave se puede saltar el paso de la generacion de la llave o respaldarla y crear una nueva
Generar un nuevo par de llaves
ssh-keygen -t rsa -b 4096
ls ~/.ssh/id_*
- Genera un nuevo par de llaves de 4096 bits
- Solicitara un passphrase aquí hay que dar “enter” dos veces para que se quede en blanco o sin passphrase
Copiar la llave Publica
ssh-copy-id remote_username@server_ip_address
Se conectara al host copiara la llave y regresara el prompt local
Si por alguna razon no esta disponible el ssh-copy-id
cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Entrar al host sin password
ssh remote_username@server_ip_address
Si todo va bien se debe conectar al host remoto sin password
Deshabilitar la autenticacion en el host remoto
Antes de continuar validar que se tenga acceso al host remoto con un usuario que tenga privilegios de sudo
ssh sudo_user@server_ip_address
nano /etc/ssh/sshd_config
PasswordAuthentication no
(estas 2 lineas hacen que no se pueda entrar via ssh normal y solo con el token generado, la sugerencia es que se habilite pero tener una sesion abierta y probar con una sesion nueva, por si falla algo no perder el acceso)ChallengeResponseAuthentication no
UsePAM no (en centos esta variable debe dejarse en yes)
systemctl restart sshd
Agregando mas seguridad
En el host remoto editar el authorized_keys nano ~/.ssh/authorized_keys
El archivo comienza con entradas como ssh-rsa o ssh-dsa y luce paraecido a esto,
from="192.168.0.1", command="/home/user/validate-rsync.sh"
Agregar las siguientes lineas antes del “ssh-“, esto ayudara a limitar desde donde las conexiones pueden ser hechas, y que comandos pueden ser ejecutados, el archivo pudiera verse asi: from="187.190.242.205",no-port-forwarding,no-X11-forwarding,no-pty,command="/home/zague/validate-rsync.sh" ssh-rsa
Solo probe con ip pero puede probarse con nombre de host. Ahora solo queda crear el archivo /home/user/validate-rsync.sh.nano /home/user/validate-rsync.sh
#!/bin/bash
case $SSH_ORIGINAL_COMMAND in
test*)
$SSH_ORIGINAL_COMMAND
;;
*rsync*)
$SSH_ORIGINAL_COMMAND
;;
*chown*)
$SSH_ORIGINAL_COMMAND
;;
*gunzip*)
$SSH_ORIGINAL_COMMAND
;;
*root*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "only few commands are allowed -ACCESS DENIED--"
exit 1
;;
esac
Asignarle privilegios de ejecuciónchmod +x
En el script anterior cada uno de los casos pertenece a uno de los comandos que serán ejecutados, de tal manera que se revisan secuencialmente y solo puede ejecutar esos comandos. para mas referencia ver el articulo de respaldos automáticos con rsync