El escenario es el siguiente, CentOS 7 recién instalado con OpenSSH instalado y configurado por default y SELinux desactivado.
Aunque usemos contraseñas con 20 o 30 caracteres usando caracteres especiales y todo eso, siempre es mejor el uso de llaves y cambiar algunos valores en el servidor al que nos queremos conectar.
Para generar una clave SSH en Linux usando el comando ssh-keygen deberías ejecutarlo usando la línea de comandos, esto se hace desde el cliente:
[cc lang=»bash»]
perengao@elrond:~$ ssh-keygen -t rsa -b 4096 -C «[email protected]»
Generating public/private rsa key pair.
Enter file in which to save the key (/home/perengano/.ssh/id_rsa):
Created directory ‘/home/perengano/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/perengano/.ssh/id_rsa.
Your public key has been saved in /home/perengano/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1AfAgsKI7fv/9h0dTHkUccMR2bwD+XkUcBQbWOaq/LA [email protected]
The key’s randomart image is:
+—[RSA 4096]—-+
|.+ . …. .B/%|
|o + . . .. . ++=O|
| . . .. . . =++|
| . . . o.*.|
| . S .o o|
| . . .. . |
| . +. . |
| . . .+. |
| ..o…E.. |
+—-[SHA256]—–+
perengano@elrond:~$ cat .ssh/id_rsa.pub
[/cc]
En este ejemplo no estoy usando una passphrase, pero se aconseja usar una.
Una vez que la llave ha sido generada, podemos copiarla al servidor destino usando el siguiente comando:
[cc lang=»bash»]
ssh-copy-id user@serverip
[/cc]
También pueden hacerlo usando copiar y pegar, subiendo el archivo con scp, etc.
[cc lang=»bash»]
perengano@elrond:~$ ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: «/home/perengano/.ssh/id_rsa.pub»
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
[email protected]’s password:
Number of key(s) added: 1
Now try logging into the machine, with: «ssh ‘[email protected]'»
and check to make sure that only the key(s) you wanted were added.
perengano@elrond:~$
[/cc]
Ahora nos toca realizar lo siguiente del lado del servidor, primeramente dejar los permisos para que OpenSSH no nos de lata:
[cc lang=»bash»]
perengano@elrond:~$ ssh [email protected]
[email protected]’s password:
Last login: Mon Apr 10 19:22:07 2018 from 189.201.191.13
[perengano@B8GUsg ~]$ chmod 700 .ssh
[perengano@B8GUsg ~]$ chmod 600 .ssh/authorized_keys
[perengano@B8GUsg ~]$
[/cc]
OpenSSH es muy quisquilloso con los permisos tanto del directorio como del archivo, en mi caso había hecho el segundo comando, pero no el primero y no me permitía loguearme con las llaves.
[cc lang=»bash»]
[perengano@B8GUsg ~]$ sudo su –
[sudo] password for perengano:
Último inicio de sesión:lun abr 16 21:40:02 EDT 2018en pts/0
Último inicio de sesión fallido:lun abr 16 22:47:05 EDT 2018de 195.208.185.50en ssh:notty
Hubo 2 intentos de logueo fallidos desde el último logueo exitoso.
[root@B8GUsg ~]#
[/cc]
Ya como root, hacemos una copia de seguridad del archivo de configuración original y editamos:
[cc lang=»bash»]
[root@B8GUsg ~]# cp /etc/ssh/sshd_config /etc/ssh/orig.sshd_config
[root@B8GUsg ~]# nano /etc/ssh/sshd_config
[/cc]
Y los valores que hay que cambiar son los siguientes
[cc lang=»vim»]
# Desactivamos que root pueda loguearse usando ssh
PermitRootLogin no
# Estos valores nos permiten usar SSH keys en lugar de passwords
RSAAuthentication yes
PubkeyAuthentication yes
# Desactivamos las contraseñas
PasswordAuthentication no
[/cc]
Reiniciamos el servicio:
[cc lang=»bash»]
[root@B8GUsg ~]# systemctl restart sshd.service
[/cc]
Nota: Abrir una segunda terminal o pestaña de terminal y desde ahí hacer pruebas, no te desconectes en caso de que algo no funcione como debe:
[cc lang=»bash»]
perengano@elrond:~$ ssh vpsmikel.ds
Last login: Mon Apr 16 21:52:28 2018 from 189.201.191.13
[perengano@B8GUsg ~]$
[/cc]
Con eso deben tener todo listo para poder hacer uso de las llaves. Sin embargo, si quieren usar un cliente como Filezilla para copiar archivos y todo eso, necesitamos exportar nuestra llave. Esto lo podemos hacer usando puttygen.exe
Creo un directorio con los archivos generados al inicio:
[cc lang=»bash»]
perengano@elrond:~$ mkdir keys
perengano@elrond:~$ cp .ssh/id_rsa keys
perengano@elrond:~$ cp .ssh/id_rsa.pub keys
[/cc]
Vamos a usar Wine, si no lo tienen pueden instalarlo:
[cc lang=»bash»]
perengano@elrond:~$ sudo apt install wine wine-utils
perengano@elrond:~$ cd keys
perengano@elrond:~$ wine ../Descargas/puttygen.exe
it looks like wine32 is missing, you should install it.
as root, please execute «apt-get install wine32»
[/cc]
Después de hacerlo, podemos ver los archivos que tenemos:
[cc lang=»bash»]
perengano@elrond:~/keys$ ls -la
total 20
drwxr-xr-x 2 perengano perengano 4096 abr 16 23:21 .
drwxr-xr-x 49 perengano perengano 4096 abr 16 17:51 ..
-rw-r–r– 1 perengano perengano 3244 abr 16 23:15 id_rsa
-rw-r–r– 1 perengano perengano 755 abr 16 23:15 id_rsa.pub
-rw-r–r– 1 perengano perengano 2701 abr 16 23:21 perengano.ppk
perengano@elrond:~/keys$
[/cc]
Ahora sí, podemos añadir nuestro archivo .ppk a Filezilla
Y eso sería todo.
Referencias:
- https://www.linuxtotal.com.mx/index.php?cont=info_seyre_010
- https://www.codeenigma.com/host/faq/how-do-i-create-ssh-public-key-windows-pc
- https://www.hostinger.mx/tutoriales/llaves-ssh