Si estas programando un script y necesitas conectarte por medio de ssh a otro servidor sin usar una contraseña o simplemente no quieres estar escribiéndola para conectarte al servidor remoto, puedes utilizar un public-key para conectarte sin necesidad de proporcionar el password.
- Antes que nada primero vamos a necesitar un usuario/password de ambos servidores
- segundo, por obvias razones ambos usuarios deben tener un directorio home: useradd -m usuario
- Mas información acerca de administración de usuarios en Linux
Ejemplo, digamos que en tu server local tienes al usuario ‘root’ con el cual te quieres conectar a un servidor remoto usando el usuario ‘sagara’.
Vamos a cubrir la mayoría de los aspectos para realizar esta tarea en una serie de pasos muy sencillos:
Revisar keys ya existentes
Si te encuentras con los archivos id_rsa y id_rsa.pub en ~/.ssh quiere decir que ya se ha generado un key con anterioridad para dicho usuario. Por lo que no tienes que crear nuevamente el key o dejara de funcionar la autenticación remota de scripts o usuarios que estén utilizando esta key en otros servidores remotos. En tal caso no generes la key y ve al paso de la instalación.
ls -la ~/.ssh
En este caso no tenemos dichos archivos proseguimos a generar la key.
Generar la key
Para generar la key simplemente usa el comando: ssh-keygen
Presiona la tecla ‘Enter’ para usar el directorio por default que es el home del usuario local (root) y no escribas una passphrase, solo presiona ‘Enter’ y una vez mas para confirmar.
Si escribes un passphrase vas a tener que ponerla cada vez que intentes entrar al servidor remoto, algo así como ingresar una contraseña.
Instalar la key
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-host
Reemplaza ‘user@remote-host’ por el usuario remoto y el host remoto a donde intentas entrar como ‘sagara@servidor.remoto.com’ y seguidamente ingresa la contraseña del usuario ‘sagara’:
Si el usuario remoto no tiene un directorio en /home te va a salir un mensaje como este:
Could not chdir to home directory /home/sagara: No such file or directory mkdir: cannot create directory `.ssh': Permission denied bash: .ssh/authorized_keys: No such file or directory
Para corregir esto puedes, aunque no lo recomiendo tanto, eliminar el usuario y volver a crearlo con un home:
userdel sagara useradd -m sagara passwd sagara
O puedes asignarle un home al usuario sin tener que eliminarlo:
mkdir /home/sagara usermod -d /home/sagara -m sagara
Si por alguna razón ssh-copy-id te dice algo como ssh-copy-id command not found, manualmente haz un scp del archivo ‘id_rsa.pub’ al home del usuario remoto y después añade su contenido al final del archivo ‘ssh/authorized_keys’:
scp ~/.ssh/id_rsa.pub sagara@servidor.remoto.com:/home/sagara/ cat id_rsa.pub >> /home/sagara/.ssh/authorized_keys
Usa doble mayor que (>>) para añadir, si usas uno solo (>) vas a sobrescribir todo el contenido de ‘authorized_keys’.
Prueba la conexión y has un cache del host remoto
ssh sagara@servidor.remoto.com
Al hacerlo por primera vez cuando te salga este mensaje tienes que escribir yes:
The authenticity of host 'servidor.remoto.com (192.168.0.1)' can't be established. RSA key fingerprint is **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**. Are you sure you want to continue connecting (yes/no)? YES Warning: Permanently added 'servidor.remoto.com (192.168.0.1)' (RSA) to the list of known hosts.
Esto va a hacer que el servidor se agregue al archivo ‘.ssh/known_hosts’ y ya no hará de nuevo esta pregunta.
Comprobar permisos
Para terminar solo comprueba los permisos del directorio ‘~/.ssh’ a 700 y del archivo ‘authorized_keys’ a 600:
ls -la ~/ | grep ssh drwx------ 2 sagara sagara 4096 May 18 2011 .ssh
ls -la ~/.shh drwx------ 2 sagara sagara 4096 May 18 2011 . drwxr-xr-x 14 sagara sagara 4096 Jun 17 23:25 .. -rw-r--r-- 1 sagara sagara 2612 Oct 27 2011 authorized_keys -rw------- 1 sagara sagara 3239 Oct 27 2011 id_rsa -rw-r--r-- 1 sagara sagara 738 Oct 27 2011 id_rsa.pub -rw-r--r-- 1 sagara sagara 4604 Jun 6 09:44 known_hosts
Y listo, habrás entrado al servidor remoto sin tener que proporcionar una contraseña.
Fuente | The Geek Stuff