Implementar la autenticación basada en claves SSH en Linux
SSH (Secured Shell) es un protocolo que crea una conexión segura criptográficamente entre el cliente SSH y los servidores remotos.
Con SSH puede gestionar y administrar servidores remotos de forma segura. Esto puede resultar útil de muchas formas.
- Implementación de varios servidores
- Detener / iniciar servicios de forma remota
- Automatización
y toda tu creatividad (con suerte) ...
Como administrador de sistemas, esto es algo básico que debe saber.
Aprendamos cómo ...
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
Installing 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 instalar.
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.
geekflare@geekflare:~$ 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 [user@]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]
Generate SSH Keys
Esto debe realizarse en un servidor cliente.
Ejecute 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.
geekflare@geekflare:~$ 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 geekflare@geekflare
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 archivos nuevos en ~/.ssh
directorio.
Copy SSH Key to Remote Server
La clave privada debe copiarse ~/.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 utilizar el siguiente comando único para crear uno
mkdir -p ~/.ssh
Si ya tiene la carpeta .ssh, haga una copia de seguridad de ella.
A continuación, empujemos 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.
geekflare@geekflare:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'
ubuntu@192.168.56.101's password:
Ejecute el siguiente comando para establecer permisos en el archivo autorizado_keys en el servidor remoto.
geekflare@geekflare:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"
Genial, esto concluye que la clave se intercambia y el permiso está listo.
Login to Remote Server using 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 de geekflare.
Ejecute el comando a continuación para probar, no le pedirá contraseña esta vez.
geekflare@geekflare:~$ ssh ubuntu@192.168.56.101
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
Aqui tienes…
He iniciado sesión en el servidor remoto con éxito. Ejecutar el comando debajo le dará los detalles de IP de la máquina remota.
ubuntu@ubuntu:~$ 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 le ayude y esté interesado en aprender administración y resolución de problemas de Linux, luego consulte esto Curso Udemy.