RETO 1 en parejas: tu compañero entra en tu servidor SSH
🏁 RETO 1 en parejas: tu compañero entra en tu servidor
2º ASIR · Cliente SSH: MADLinuX de tu compañero · Servidor SSH: tu VM Debian (modo puente, en la LAN del aula) Guías: 1 servidor ssh · RETO 1 en parejas (este) · 2 scp y rsync (próximamente)
Objetivo: que compa sea de verdad el compañero de al lado: entra por SSH desde su MADLinuX a tu VM, con su clave, sin que ninguna contraseña viaje por la red.
Requisito previo: tener hecha la guía 1 hasta el punto 7 (tu VM en modo texto, en modo puente, sshd funcionando y tú entrando con tu clave).
0. Escenario y convenciones
Trabajáis en parejas: A pone el servidor, B se conecta. Después, cambiáis los papeles.
MADLinuX de B VM de A (IP_VM_A)
┌─────────────┐ LAN aula ┌─────────────┐
│ cliente ssh │ ─────────► │ sshd :22 │
│ (B = compa) │ │ pepa, compa │
└─────────────┘ └─────────────┘
| Prompt | Significa |
|---|---|
HOST_A$ |
terminal del MADLinuX de A |
VM_A$ |
terminal de la VM de A (mejor por SSH desde HOST_A: así puedes copiar y pegar) |
HOST_B$ |
terminal del MADLinuX de B |
IP_VM_A |
la IP de la VM de A en la red del aula (ya la conoces: punto 3 de la guía 1) |
⚠️ Tu VM ya era accesible para toda la red del aula desde que la pusiste en modo puente (guía 1, punto 3), no solo para ti. En este reto es la primera vez que otra persona de verdad la usa: el blindaje del punto 8 de la guía deja de ser teoría.
1. 🅰️ Confirma tu IP_VM_A
VM_A$ ip -br a # tu IP en la red del aula = IP_VM_A → díctasela a B
🤔 Si ya la apuntaste al hacer la guía 1, puede haber cambiado (DHCP): vuelve a comprobarla.
2. 🅰️ Preparar la cuenta compa
Si no la creaste en la guía (punto 4):
VM_A$ sudo adduser compa # pon una contraseña cualquiera: B NO la necesitará
VM_A$ sudo usermod -aG sudo compa
3. 🅱️ Enviar tu clave pública
Usa el par de claves que ya creaste en la guía (punto 7):
HOST_B$ cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3Nza...muy larga... b@madlinux
Envía esa línea completa a A por el chat o el correo de EducaMadrid. Es pública: no pasa nada si alguien más la ve.
⛔ Nunca envíes
~/.ssh/id_ed25519(sin.pub): es tu clave privada. Quien la tenga, es tú.
4. 🅰️ Instalar la clave de B
Conéctate a tu VM por SSH desde tu MADLinuX (en la consola de VirtualBox no podrías pegar la clave) y ejecuta, pegando la línea que te ha enviado B:
HOST_A$ ssh pepa@IP_VM_A
VM_A$ sudo -u compa mkdir -p -m 700 /home/compa/.ssh
VM_A$ echo 'ssh-ed25519 AAAAC3Nza...PEGA-AQUÍ... b@madlinux' | sudo -u compa tee -a /home/compa/.ssh/authorized_keys
VM_A$ sudo -u compa chmod 600 /home/compa/.ssh/authorized_keys
💡
sudo -u compaejecuta el comando comocompa: así la carpeta y el archivo ya son suyos, sin tener que usarchown. La clave debe quedar en una sola línea.
5. 🅰️ Blindar el servidor
Si aún no lo hiciste, aplica el punto 8 de la guía: /etc/ssh/sshd_config.d/10-aula.conf con
PermitRootLogin no
PasswordAuthentication no
AllowUsers pepa compa
VM_A$ sudo sshd -t && sudo systemctl reload ssh
6. 🅱️ Primera conexión (¡verificad la huella!)
HOST_B$ ssh compa@IP_VM_A
# The authenticity of host 'IP_VM_A' can't be established.
# ED25519 key fingerprint is SHA256:xxxxxxxx...
Antes de escribir yes, A lee su huella en voz alta:
VM_A$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Si coincide carácter a carácter, yes. Acabáis de verificar la huella por otro canal (la voz), como hacen los administradores de verdad.
7. ✅ Pruebas (desde el MADLinuX de B)
| Prueba | Resultado esperado |
|---|---|
ssh compa@IP_VM_A |
✅ entra, sin pedir contraseña |
ssh -t compa@IP_VM_A 'sudo -l' |
✅ muestra que compa puede usar sudo (pide la contraseña de compa: A te la dice). -t hace falta para que sudo pueda pedirla |
ssh root@IP_VM_A |
❌ Permission denied |
ssh intruso@IP_VM_A |
❌ Permission denied |
ssh -o PubkeyAuthentication=no compa@IP_VM_A |
❌ Permission denied (publickey): sin clave no hay forma de entrar |
Y desde la VM de A, mirad quién está dentro:
VM_A$ who # ¿aparece compa?
VM_A$ sudo journalctl -u ssh | grep compa # busca: Accepted publickey for compa from ...
8. 🔄 Cambiad los papeles
Ahora B pone el servidor y A se conecta. Repetid los pasos 1 a 7.
9. 🤔 Reflexión: aquí no hay nada que «cerrar»
A diferencia de una regla de reenvío de puertos, el modo puente no se «abre» ni se «cierra» para esta práctica: mientras tu VM esté encendida y en modo puente, es accesible para toda la red del aula, lo hayas usado hoy en este reto o no. Lo que de verdad te protege no es estar «escondido», es el blindaje del punto 5 (PermitRootLogin no, PasswordAuthentication no, AllowUsers).
🤔 Preguntas para reflexionar (en el cuaderno)
- En el
journalctldel paso 7, ¿desde qué IP dice la VM que entrócompa? Compárala con la IP real del MADLinuX de B (ip -br aenHOST_B). ¿Coinciden? ¿Por qué es importante que coincidan de cara a bloquear a un atacante por su IP? (Lo retomaremos con fail2ban en la guía 3.) - ¿Por qué es más seguro que B te envíe su clave pública que decirle a B una contraseña?
- Si la huella que lee A en voz alta no coincide con la que ve B, ¿qué podría estar pasando? ¿Qué debe hacer B?
⚠️ Errores frecuentes
| Síntoma (en B) | Causa probable | Solución |
|---|---|---|
Connection refused |
sshd parado en la VM de A, o IP_VM_A equivocada |
en A: systemctl status ssh; repite ip -br a |
Connection timed out |
IP_VM_A cambió (DHCP), o la VM de A está apagada |
A comprueba ip -br a y que la VM está encendida |
Permission denied (publickey) |
clave mal pegada (partida en varias líneas), permisos, o compa no está en AllowUsers |
paso 4 (una sola línea; 700 y 600) y paso 5 |
REMOTE HOST IDENTIFICATION HAS CHANGED |
A reinstaló su VM, o esa IP perteneció antes a otra VM | verificad la huella en voz alta; si es legítimo: ssh-keygen -R IP_VM_A |
▶ Ver solución (resumen de comandos)
# 1) A: confirmar IP_VM_A
VM_A$ ip -br a
# 2) A: cuenta compa con sudo
VM_A$ sudo adduser compa && sudo usermod -aG sudo compa
# 3) B: enviar la pública a A (chat/correo)
HOST_B$ cat ~/.ssh/id_ed25519.pub
# 4) A: instalarla (por SSH desde HOST_A, para poder pegar)
HOST_A$ ssh pepa@IP_VM_A
VM_A$ sudo -u compa mkdir -p -m 700 /home/compa/.ssh
VM_A$ echo 'ssh-ed25519 AAAA... b@madlinux' | sudo -u compa tee -a /home/compa/.ssh/authorized_keys
VM_A$ sudo -u compa chmod 600 /home/compa/.ssh/authorized_keys
# 5) A: blindar
VM_A$ sudo nano /etc/ssh/sshd_config.d/10-aula.conf # PermitRootLogin no / PasswordAuthentication no / AllowUsers pepa compa
VM_A$ sudo sshd -t && sudo systemctl reload ssh
# 6-7) B: conectar (verificando la huella en voz alta) y probar
HOST_B$ ssh compa@IP_VM_A
HOST_B$ ssh root@IP_VM_A # → Permission denied
Respuesta a la pregunta 1: con modo puente, la VM ve la IP real del MADLinuX de B (no hay NAT de por medio que la disfrace). Por eso, a diferencia de lo que pasaría con una conexión reenviada, aquí sí tiene sentido bloquear por IP a un atacante — es justo lo que hará fail2ban en la guía 3.
➡️ Siguiente: Guía 2: scp y rsync (próximamente)