martes, 8 de mayo de 2012

Inicio de sesión automático en ssh

Inicio de sesión automático en ssh

Un problema que solemos tener constantemente es tener que introducir la contraseña de los usarios de forma continua cuando conectamos a una máquina remota via SSH.
En linux se resuelve siguiendo estos dos pasos:
  1. Creando un par  clave privada-publica para mi usuario.
  2. Añadiendo la clave pública del par al fichero de claves autorizadas del equipo al cual queremos conectarnos.

Generar el par clave privada - clave pública

Debemos generar un par de clave privada-pública en el equipo desde el cual queremos acceder, de forma, que estos autentifiquen a nuestro usuario frente al servidor ssh.

En Windows

En Windows, debemos usar la utilidad Puttygen, que nos permitirá crear la clave deseada:

Para generar una clave, primero escogemos en los botones de abajo entre las tres opciones de clave:
  1. SSH1(RSA)
  2. SSH2-RSA
  3. SSH2-DSA
En principio el algoritmo RSA aunque es algo más antiguo es seguro, mientras que el DSA es más novedoso y también es considerado seguro.
Tras escoger el algoritmo, debemos pulsar el boton generate, y luego, mover el ratón por la pantalla para que el programa pueda crear nuestra clave.
Tras tener la clave, nos aparecerá una ventana similar a esta:
Como puedes ver, se muestra dos cuadros donde pone Key passphrase: En ellos debemos colocar una clave que usaremos para poder instalar nuestra clave privada, de forma que si perdemos esta, no puedan facilmente obtenerla del archivo.
Ya solo nos queda ver que disponemos de dos botones, uno llamado "Save Public Key" que se usa para guardar la clave pública en un fichero de texto plano.
Para mi clave pública ese texto es el siguiente:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "dsa-key-20120508"
AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRI
zTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcb
e4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5d
AAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBht
SYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7
zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPU
j0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI
3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU5
7jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7A
sA==
---- END SSH2 PUBLIC KEY ----
Y otro botón denominado save private key, que nos guardará en un fichero de certificado ppk la clave privada.
Nota: El fichero ppk contiene tanto la clave privada como la pública.

En Linux

En Linux deberemos crear el par de clave privada-pública con el comando ssh-keygen, que nos creará una clave RSA por defecto:
emc2@server1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/emc2/.ssh/id_rsa): emc2@server1.emc.lan
emc2@server1.emc.lan already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match.  Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in emc2@server1.emc.lan.
Your public key has been saved in emc2@server1.emc.lan.pub.
The key fingerprint is:
f9:fc:c2:22:9b:53:59:ef:a8:e5:32:1e:c9:6e:be:11 emc2@server1
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         ..      |
|        Eo .     |
|       .o=  .    |
|       .=.+o     |
|      oo==+..    |
|      oB**...    |
+-----------------+
Como puedes ver, en primer lugar nos pide un nombre de fichero donde guardar la clave, a lo cual respondemos con emc2@server1.emc.lan.ppk (si no le pongo extensión me dejaría el fichero ppk sin extensión).
Tras ello, me pide una contraseña de paso para instalar el certificado, y despues lo genera.
El programa va a generar dos archivos:
  1. emc2@server1.emc.lan.ppk: Contiene el par clave publica y privada.
  2. emc2@server1.emc.lan.ppk.pub: Contiene la clave pública, y es un fichero de texto normal y corriente.

Añadir al repositorio de claves del servidor ssh nuestra clave pública

Deberemos añadir la clave en cada usuario del servidor al cual queramos conectarnos automaticamente.
Este proceso lo podemos realizar de dos formas:
  1. Editando los ficheros de configuración ssh.
  2. Con el comando ssh-copy-id

Editando los ficheros de configuración del servidor ssh:

Nuestro usuario en el servidor debe tener una carpeta .ssh, que deberá tener los siguientes permisos:
emc2@server1:~$ ls -ld .ssh
drwx------ 2 emc2 emc2 4096 may  8 09:43 .ssh
Como ves, solo es accesible al usuario.
Dentro de esa carpeta, debe existir (y si no lo creamos) denominado 
 en la cual aparecerá un fichero denominado authorized_keys que contiene las claves públicas autorizadas:
emc2@server1:~/.ssh$ ls -l authorized_keys
-rw------- 1 emc2 emc2 618 may  8 09:43 authorized_keys
Como puedes ver, el fichero tiene permisos solo para el propietario.
Debemos editar el fichero que contiene la clave pública que hemos generado en el cliente, y debemos pegar esa clave pública en nuestro fichero authorized_keys, el formato, es el siguiente:
En mi caso el contenido del fichero es el siguiente:
emc2@server1:~/.ssh$ cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRIzTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcbe4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5dAAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBhtSYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPUj0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU57jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7AsA== emc2@portatilemc2sev.emc.lan
Ojo: tras ssh-dss no hay un retorno de carro, hay un espacio que corta la propia página web.
Como puedes ver, tendremos:
  1. en primero lugar el protocolo ssh-dss (también podría ser ssh-rss), 
  2. la clave pública que queremos usar (esa la editamos con el block de notas o cualquier editor de textos).
  3. == usuario@nodo que autenticamos.

Usar el comando ssh-copy-id

Con el comando ssh-copy-id la vida es más facil. Pero esto solo lo podemos hacer con clientes Linux.
Para usarlo, solamente ejecutamos:
$ ssh-copy-id usuario@maquina
Ahora la máquina nos pedirá la contraseña de usario, y tras iniciar sesión, añadirá la clave pública a el repositorio de claves del cliente.
Ojo: Para que esto funcione, al crear la clave con ssh-keygen, no debemos haber dado nombre al fichero de certificado, escogiendo el nombre por defecto (~/.ssh/id_rsa.pub).

No hay comentarios:

Publicar un comentario