Configuración de acceso SSH con clave pública a servidor remoto


Para conectarse a un servidor con clave publica usando el protocolo SSH se debe crear en la maquina local dos claves: la clave publica y la clave privada. La clave publica se coloca en el servidor y la privada se queda en la pc que quiere acceder al servidor. Cada vez que se intente acceder al servidor se verificara si la clave privada esta en la maquina local.

Para configurar el acceso SSH con clave publica se debe seguir estos pasos:

- Generar el par de claves pública/privada.
- Copiar la clave pública al servidor.
- Deshabilitar el acceso al servidor por contraseña.

Generar el par de claves Publica/Privada:

Para generar el par de claves se puede usar ssh-keygen en la máquina local desde la que se quiere acceder al servidor:

ssh-keygen pide la ruta y el nombre del archivo que alojará las claves pública y privada. Se puede guardar donde usted quiera, pero la carpeta debe tener permisos 700 y el archivo con la clave privada 600. Es bastante importante esto, de lo contrario no se podra establecer la conexión. La clave privada la podemos proteger con una contraseña, de esta manera, si cae en manos equivocadas no se le hará fácil usarla.

Maquina local:

user@localmachine$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.

ssh-keygen generará dos archivos:
- id_rsa que es la clave privada y la cual permanecerá en la máquina local.
- id_rsa.pub que es la clave pública y la que se tiene que copiar al servidor remoto al que se quiere acceder.

Antes de copiar la clave publica al servidor:
En el servidor, la clave pública hay que incluirla en el fichero /home/user/.ssh/authorized_keys. Si la carpeta .ssh no existe, se debe crear, así como el archivo authorized_keys:

user@remotemachine$ mkdir .ssh
user@remotemachine$ chmod 700 .ssh
user@remotemachine$ touch .ssh/authorized_keys
user@remotemachine$ chmod 600 .ssh/authorized_keys

Copiar la clave publica al servidor:
Una vez generadas el par de claves en la máquina local debemos copiar la clave pública al servidor remoto, ejemplo:

user@localmachine$ scp ~/.ssh/id_rsa.pub user@remotemachine:/home/user/uploaded_key.pub

Por último copiamos la clave y borramos el archivo copiado al servidor:
user@remotemachine$ echo `cat ~/uploaded_key.pub` >> ~/.ssh/authorized_keys
user@remotemachine$ rm /home/user/uploaded_key.pub

Deshabilitar el acceso al servidor por contraseña:
Una vez habilitado el acceso SSH mediante clave pública, se puede deshabilitar el acceso por contraseña. Esto aumentará mucho mas la seguridad, pero implica que si se pierde la clave privada se perderá el acceso al servidor, debemos guardar la clave privada muy cuidadosamente.

La configuración del servidor SSH la podemos encontrar en el fichero /etc/ssh/sshd_config. Para deshabilitar el acceso SSH por contraseña editamos el archivo como root y agregamos la siguiente linea:

PasswordAuthentication no

Para aumentar mucho mas la seguridad podemos adicionar 2 ajustes mas en el fichero /etc/ssh/sshd_config:

Desactivar el acceso ssh para el usuario root:
PermitRootLogin no

Dar acceso SSH solo a los usuarios que lo necesiten, y no a todos:
AllowUsers usuario1 usuario2

Una vez realizados todos los cambios, debemos reiniciar el servidor SSH:
sudo systemctl restart sshd

Acceder al servidor con clave publica:
Para conectarse al servidor con clave pública en vez de contraseña:
user@localmachine$ ssh user@remotemachine

Podemos especificar la clave privada con la opción -i:
user@localmachine$ ssh -i id_rsa user@remotemachine

Comentarios