Implementar autenticación basada en clave SSH en Linux
SSH (Secured Shell) es un protocolo que crea una conexión criptográficamente segura entre el cliente SSH y los servidores remotos.
Con SSH puede gestionar y administrar servidores remotos de forma segura. Esto puede ser útil de muchas maneras.
- Despliegue multiservidor
- Detener/iniciar servicios de forma remota
- Automatización
y toda tu creatividad (ojalá)…
Como administrador de sistemas, esto es algo básico que debe saber.
Aprendamos cómo…
Voy a generar una clave privada y una clave pública. La clave privada debe almacenarse en su máquina cliente ssh y debe mantenerse segura. La clave pública debe copiarse en el servidor remoto para iniciar sesión en ese servidor desde la máquina cliente SSH sin necesidad de contraseña.
Aprenderá lo siguiente.
- Instale SSH (no es necesario si ya está instalado)
- Generar claves SSH
- Copie la clave SSH a un servidor remoto
- Inicie sesión en el servidor remoto usando SSH
Para fines de demostración, tengo 2 servidores con las siguientes direcciones IP, un sistema es un cliente y el otro es un servidor en el que iniciaré sesión a través de ssh desde una máquina cliente.
- Cliente (usuario -> geekflare): 192.168.56.102
- Remoto (usuario -> ubuntu): 192.168.56.101
Instalación de SSH
Antes de seguir los pasos mencionados en este artículo, asegúrese de openssh-server
está instalado en los servidores. Si no está instalado, ejecute los siguientes comandos para instalarlo.
sudo apt-get install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
Puede ejecutar el comando ssh para verificar si está instalado en el sistema o no.
[email protected]:~$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [[email protected]]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
Generar claves SSH
Esto debe hacerse en un servidor cliente.
ejecutar el ssh-keygen
comando para generar una clave SSH. Simplemente presione enter cuando solicite el archivo, la frase de contraseña, la misma frase de contraseña. Genera un par de claves en el directorio ~/.ssh por defecto. Id_rsa es la clave privada e id_rsa.pub es la clave pública asociada.
[email protected]:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/geekflare/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/geekflare/.ssh/id_rsa.
Your public key has been saved in /home/geekflare/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|o+.. |
|+o+ |
|oo. . . o |
|.. * . * |
| B . S . o. |
| O o . . . ... .|
|+ @ o o . E=. o |
| B + o + .o.= . |
| + ... o. oo+ |
+----[SHA256]-----+
Generará dos nuevos archivos en ~/.ssh
directorio.
Copie la clave SSH al servidor remoto
La clave privada debe ser copiada ~/.ssh
carpeta en un servidor remoto. La mayoría de los servidores ya deberían tener esta carpeta; de lo contrario, debe crear una carpeta.
Y, para hacerlo:
- Inicie sesión en el servidor remoto con el usuario al que le gustaría conectarse. En mi caso, es
ubuntu
- Asegúrese de que el directorio de trabajo actual sea el directorio de inicio del usuario y luego cree una carpeta .ssh. También puede usar el siguiente comando único para crear uno
mkdir -p ~/.ssh
Si ya tiene la carpeta .ssh, haga una copia de seguridad de la misma.
A continuación, insertemos la clave pública desde un servidor cliente.
En la máquina cliente (192.168.56.102), ejecute el siguiente comando para copiar la clave pública en el servidor remoto dentro de un authorized_keys
archivo en el directorio .ssh.
[email protected]:~$ cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
[email protected]'s password:
Ejecute el siguiente comando para establecer permisos en el archivo authorized_keys en el servidor remoto.
[email protected]:~$ ssh [email protected] "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"
Genial, esto concluye que la clave se intercambió y el permiso está listo.
Inicie sesión en el servidor remoto mediante SSH
¡Probemos para ver si funciona!
Iniciemos sesión en el servidor remoto (192.168.56.101) desde una máquina cliente (192.168.56.102) como usuario geekflare.
Ejecute el siguiente comando para probar, esta vez no le pedirá la contraseña.
[email protected]:~$ ssh [email protected]
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
346 packages can be updated.
11 updates are security updates.
Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101
Aquí tienes…
He iniciado sesión en el servidor remoto con éxito. Ejecutar el siguiente comando dará los detalles de IP de la máquina remota.
[email protected]:~$ ifconfig
enp0s3 Link encap:Ethernet HWaddr 08:00:27:9b:47:86
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20239 errors:0 dropped:0 overruns:0 frame:0
TX packets:5406 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22678039 (22.6 MB) TX bytes:701710 (701.7 KB)
enp0s8 Link encap:Ethernet HWaddr 08:00:27:a9:4a:6b
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:330 errors:0 dropped:0 overruns:0 frame:0
TX packets:197 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42847 (42.8 KB) TX bytes:32774 (32.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:997 errors:0 dropped:0 overruns:0 frame:0
TX packets:997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:79654 (79.6 KB) TX bytes:79654 (79.6 KB)
Conclusión
Configurar el intercambio de claves SSH es muy sencillo, como puede ver. Espero que esto te ayude y estés interesado en aprender la administración y solución de problemas de Linux, entonces echa un vistazo a esto Curso de Udemy.