Par ejecutar un comando a un equipo remoto, normalmente se usa autenticación con el par de claves pública-privada.
Mediante ssh-keygen podemos generar la clave, con la opción -t para el tipo de clave:
$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/ejemplo/.ssh/id_dsa): Created directory '/home/ejemplo/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ejemplo/.ssh/id_dsa. Your public key has been saved in /home/ejemplo/.ssh/id_dsa.pub. The key fingerprint is: 57:2c:00:be:ef:00:0f:00:ba:be:00:19:c4:8e:be:73 ejemplo@systemadmin.es
Según el tipo de clave a generar se generan dos ficheros llamados diferente según el tipo:
- rsa1: Generará, por defecto, el fichero ~/.ssh/identity para la clave privada y el fichero ~/.ssh/identity.pub para la clave pública. Este formato es válido para el protocolo 1 de SSH
- rsa: Generará, por defecto, el fichero ~/.ssh/id_rsa para la clave privada y el fichero ~/.ssh/id_rsa.pub para la clave pública. Este formato es válido para el protocolo 2 de SSH
- dsa: Generará, por defecto, el fichero ~/.ssh/id_dsa para la clave privada y el fichero ~/.ssh/id_dsa.pub para la clave pública. Este formato es válido para el protocolo 2 de SSH
A continuación deberemos copiar la clave pública al equipo remoto, añadiéndola al fichero ~/.ssh/authorized_keys, que deberá tener permisos 600:
chmod 600 ~/.ssh/authorized_keys
A continuación ya podremos conectarnos a dicho equipo sin contraseña:
[root@local ~]# ssh remoto.systemadmin.es -l jprats Last login: Sun May 1 19:15:16 2011 from local.systemadmin.es CentOS release 5.5 (Final) Linux remoto.systemadmin.es 2.6.34.6-xxxx-grs-ipv6-64 #3 SMP Fri Sep 17 16:06:38 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux [root@remoto ~]#
Para ejecutar comandos simplemente deberemos añadirlo al final del comando ssh para conectarnos:
[root@local ~]# ssh remoto.systemadmin.es -l jprats uname -a Linux remoto.systemadmin.es 2.6.34.6-xxxx-grs-ipv6-64 #3 SMP Fri Sep 17 16:06:38 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux
En el caso que por algún motivo se perdiese la clave del ~/.ssh/authorized_keys nos pediría contraseña, lo cual no nos sirve de nada para un script:
# ssh remoto.systemadmin.es -l jprats who jprats@remoto.systemadmin.es's password:
Para evitar que se quede esperando que se introduzca una contraseña que nunca se introducirá, al ser un script, debemos añadir la opción BatchMode=yes para indicar al ssh que no se quede esperando sino que simplemente falle:
# ssh -o BatchMode=yes remoto.systemadmin.es -l jprats who Permission denied (publickey,password,keyboard-interactive).
Podemos conseguir un efecto similar mediante la opción PasswordAuthentication=no, pero en caso que no este la entrada del equipo en el fichero ~/.ssh/known_hosts se quedará colgado igualmente:
# ssh -o PasswordAuthentication=no remoto.systemadmin.es -l jprats who The authenticity of host 'remoto.systemadmin.es (111.111.111.73)' can't be established. RSA key fingerprint is de:ad:be:ef:de:6e:25:69:ed:06:df:ac:32:ba:be:c0. Are you sure you want to continue connecting (yes/no)?
Mientras que con BatchMode=yes simplemente fallará:
# ssh -o BatchMode=yes remoto.systemadmin.es -l jprats who Host key verification failed.
Para conseguir el mismo efecto deberíamos añadir
StrictHostKeyChecking=yes, que por defecto esta a ask:
# ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=yes remoto.systemadmin.es -l jprats who No RSA host key is known for remoto.systemadmin.es and you have requested strict checking. Host key verification failed.
Por lo tanto, resulta muchos más cómodo usar BatchMode=yes
Tomado de: http://systemadmin.es/2011/05/acceso-sin-contrasena-y-batchmode-para-ssh
No hay comentarios:
Publicar un comentario