195 lines
7.0 KiB
Markdown
195 lines
7.0 KiB
Markdown
# A06.P001 - Habilitar SSH con Claves RSA Legacy
|
|
|
|
> **Ámbito:** A06 — dtic-XenServer
|
|
|
|
**Código:** A06.P001
|
|
**Fecha:** 10 de abril de 2026
|
|
**Autor:** Sistema ADN
|
|
**Versión:** 1.0
|
|
**Estado:** ✅ COMPLETADO
|
|
**Dependencia:** Ninguna
|
|
|
|
## 📊 Progreso General
|
|
|
|
- **Fase 0: Preparación** [██████████] 100% (3/3) ✅
|
|
- **Fase 1: Diagnóstico** [██████████] 100% (4/4) ✅
|
|
- **Fase 2: Despliegue Clave**[██████████] 100% (4/4) ✅
|
|
- **Fase 3: Credenciales** [██████████] 100% (3/3) ✅
|
|
- **Fase 4: Automatización** [██████████] 100% (5/5) ✅
|
|
|
|
## 📋 Resumen Ejecutivo
|
|
|
|
Habilitar autenticación SSH con claves RSA entre **srv-ns8** (OpenSSH 9.2) y **srv-xen1** (OpenSSH 6.6.1, Citrix XenServer 7.0) para automatizar las exportaciones de backups de VMs sin intervención manual.
|
|
|
|
**Problema identificado:**
|
|
- OpenSSH 9.2 (srv-ns8) usa por defecto algoritmos `rsa-sha2-256/512`
|
|
- OpenSSH 6.6.1 (srv-xen1) solo soporta `ssh-rsa` (SHA-1, legacy)
|
|
- Resultado: `no mutual signature algorithm` — la clave es rechazada
|
|
|
|
**Solución:**
|
|
1. Agregar opciones SSH legacy para compatibilidad
|
|
2. Desplegar clave pública en srv-xen1 usando password temporal
|
|
3. Registrar credenciales en bóveda `candados`
|
|
|
|
## 📅 Fases de Implementación
|
|
|
|
### ✅ **FASE 0: Preparación (COMPLETADA)**
|
|
|
|
#### Tareas Iniciales
|
|
- [x] **0.1:** Crear ámbito dtic-XenServer en `docs/ambito/dtic-XenServer/`
|
|
- [x] **0.2:** Crear este plan en `A06.P001_Habilitar_SSH_Legacy.md`
|
|
- [x] **0.3:** Identificar credenciales actuales de srv-xen1 (usuario `rmonla`, password `sudo`)
|
|
|
|
**Notas:**
|
|
- Usuario: `rmonla` (confirmado en `03_seguridad.md`)
|
|
- Password: `sudo` (clave genérica en bóveda para XenServer)
|
|
- IP: `10.0.10.23`, Puerto: `22`
|
|
|
|
### ✅ **FASE 1: Diagnóstico de Compatibilidad SSH (COMPLETADA)**
|
|
|
|
#### Pruebas Realizadas
|
|
- [x] **1.1:** Verificar versión OpenSSH en srv-xen1 (`ssh -V` remoto)
|
|
- [x] **1.2:** Listar algoritmos soportados por servidor (`ssh -Q kex`)
|
|
- [x] **1.3:** Confirmar error `no mutual signature algorithm` con clave RSA default
|
|
- [x] **1.4:** Testear conexión con opciones legacy y clave específica
|
|
|
|
**Resultado obtenido:**
|
|
```
|
|
OpenSSH 6.6.1p1 XenServer 7.0
|
|
Clave instalada: id_rsa_xen (xen-connection)
|
|
Opciones requeridas: -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa
|
|
```
|
|
|
|
### ✅ **FASE 2: Despliegue de Clave Pública (COMPLETADA)**
|
|
|
|
#### Procedimiento Ejecutado
|
|
- [x] **2.1:** Obtener password de bóveda (`candados.rb get srv-xen01:rmonla`)
|
|
- [x] **2.2:** Usar `ssh-copy-id` con opciones legacy y clave específica:
|
|
```bash
|
|
sshpass -p "$PASS" ssh-copy-id \
|
|
-i ~/.ssh/id_rsa_xen.pub \
|
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
|
-o HostkeyAlgorithms=+ssh-rsa \
|
|
rmonla@10.0.10.23
|
|
```
|
|
- [x] **2.3:** Verificar que clave se agregó a `~/.ssh/authorized_keys` en srv-xen1
|
|
- [x] **2.4:** Testear conexión sin password:
|
|
```bash
|
|
ssh -i ~/.ssh/id_rsa_xen \
|
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
|
-o HostkeyAlgorithms=+ssh-rsa \
|
|
rmonla@10.0.10.23 "hostname"
|
|
```
|
|
|
|
**Resultado:**
|
|
```
|
|
srv-xen01
|
|
rmonla
|
|
SSH exitoso con clave xen
|
|
```
|
|
|
|
### ✅ **FASE 3: Registrar Credenciales en Bóveda (COMPLETADA)**
|
|
|
|
#### Claves en Bóveda
|
|
- [x] **3.1:** `srv-xen01:rmonla` — password de usuario (ya existente)
|
|
- [x] **3.2:** Clave SSH: `~/.ssh/id_rsa_xen` (xen-connection, passphrase protegida)
|
|
- [x] **3.3:** Ficha `nodos/srv-xen1.md` actualizada con:
|
|
- Usuario: `rmonla`
|
|
- Auth: `RSA Legacy` (OpenSSH 6.6.1)
|
|
- Bóveda: `srv-xen01:rmonla`
|
|
- Clave: `~/.ssh/id_rsa_xen`
|
|
- SSH opts: `-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa`
|
|
|
|
### ✅ **FASE 4: Automatización en ADN CLI (COMPLETADA)**
|
|
|
|
#### Modificaciones a `adn/tools/cli/ssh.rb`
|
|
- [x] **4.1:** Detectar nodo srv-xen1 y aplicar opciones legacy automáticamente
|
|
- [x] **4.2:** Agregar método `ejecutar_con_rsa_legacy()` para nodos XenServer
|
|
- [x] **4.3:** Testear con `./adn/tools/run ssh srv-xen1 "hostname"`
|
|
|
|
#### Configuración en `adn/tools/cli/nodos/info.rb`
|
|
- [x] **4.4:** Agregar detección de `auth_type: :rsa_legacy` y correcta lectura de usuario.
|
|
- [x] **4.5:** Ajustar orden de regex OS para priorizar lectura de Linux sobre genéricos.
|
|
|
|
---
|
|
|
|
## 🎯 Criterios de Éxito
|
|
|
|
| Fase | Criterio | Verificación |
|
|
| :--- | :--- | :--- |
|
|
| **Diagnóstico** | Algoritmos identificados | ✅ `ssh -Q kex` ejecutado |
|
|
| **Despliegue** | Clave pública instalada | ✅ `authorized_keys` en srv-xen1 |
|
|
| **Conexión** | SSH sin password funcional | ✅ `ssh srv-xen1 "hostname"` OK |
|
|
| **Automatización** | ADN CLI soporta legacy | ✅ `./adn/tools/run ssh srv-xen1` OK |
|
|
|
|
## 📝 Notas Técnicas
|
|
|
|
### Incompatibilidad RSA: OpenSSH 9.2 vs 6.6.1
|
|
|
|
| Versión | Algoritmos RSA | Estado |
|
|
| :--- | :--- | :--- |
|
|
| **OpenSSH 9.2+** (2023+) | `rsa-sha2-256`, `rsa-sha2-512` | ✅ Seguro (SHA-2) |
|
|
| **OpenSSH 8.8+** (2021+) | `ssh-rsa` DESACTIVADO por defecto | ⚠️ SHA-1 débil |
|
|
| **OpenSSH 6.6.1** (2014, XenServer 7.0) | Solo `ssh-rsa` (SHA-1) | ⚠️ Legacy |
|
|
|
|
**Error característico:**
|
|
```
|
|
debug1: Offering public key: /home/rmonla/.ssh/id_rsa
|
|
debug1: send_pubkey_test: no mutual signature algorithm
|
|
```
|
|
|
|
### Opciones SSH para Compatibilidad Legacy
|
|
|
|
```bash
|
|
# Forzar algoritmo ssh-rsa (SHA-1) para servidores antiguos
|
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa
|
|
-o HostkeyAlgorithms=+ssh-rsa
|
|
|
|
# Para OpenSSH < 7.0 también puede necesitarse:
|
|
-o KexAlgorithms=+diffie-hellman-group14-sha1
|
|
-o Ciphers=+aes128-ctr,aes256-ctr
|
|
```
|
|
|
|
### Comando ssh-copy-id modificado
|
|
|
|
```bash
|
|
# Password desde bóveda
|
|
PASS=$(ruby adn/tools/candados/candados.rb get srv-xen1:rmonla:password)
|
|
|
|
# Desplegar clave con opciones legacy
|
|
sshpass -p "$PASS" ssh-copy-id \
|
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
|
-o HostkeyAlgorithms=+ssh-rsa \
|
|
-o StrictHostKeyChecking=no \
|
|
rmonla@10.0.10.23
|
|
```
|
|
|
|
## ⚠️ Riesgos y Consideraciones
|
|
|
|
| Riesgo | Impacto | Mitigación |
|
|
| :--- | :--- | :--- |
|
|
| **SHA-1 es débil** | Seguridad reducida | Aceptar solo para red interna (10.0.10.x) |
|
|
| **XenServer 7.0 EOL** | Sin parches de seguridad | Aislar red, solo acceso desde srv-ns8 |
|
|
| **Migración futura** | Cambiar hipervisor | Documentar para transición a Proxmox |
|
|
|
|
## 🔄 Armonía Integral
|
|
|
|
**Última actualización:** 2026-04-10 (creación del plan)
|
|
|
|
| Documento | Estado | Notas |
|
|
| :--- | :--- | :--- |
|
|
| `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito |
|
|
| `A06.P001_Habilitar_SSH_Legacy.md` | ⏳ Pendiente | Este plan |
|
|
| `nodos/srv-xen1.md` | ✅ Actualizado | Info de autenticación agregada |
|
|
| `adn/tools/cli/ssh.rb` | ⏳ Pendiente | Soporte para rsa_legacy |
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
- **Diagnóstico completo**: Ver sección "Causa Raíz del Fallo SSH RSA" en conversación del 2026-04-10
|
|
- **OpenSSH 6.6.1 compat**: [Release Notes](https://www.openssh.com/releasenotes.html)
|
|
- **Citrix XenServer 7.0 Docs**: [Management CLI](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management.html)
|
|
- **ADN CLI SSH**: [`adn/tools/cli/ssh.rb`](../../../adn/tools/cli/ssh.rb)
|
|
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|