- Inicio
- Redes multinube
- Customer Edge diagnostics
- Reaching a Customer Edge
- SSH
SSH
Capturado el 28-07-2026 desde un CE de este despliegue. sitecli/capture-manifest.json
registra qué nodo, y scripts/capture-sitecli.sh --check vuelve a verificar la superficie
de comandos contra un CE activo.
SSH llega a la cuenta admin del appliance, cuyo shell de inicio de sesión es el Site CLI
(/opt/bin/vpmu). Esta es la única ruta a la superficie completa de comandos en la caja — la
API de depuración expone 34 comandos, y el appliance en sí ofrece muchos más
que no están en esa API en absoluto.
cd terraformSLI=$(terraform output -json ce_sli_private_ips | jq -r '.eastus01')ssh -tt -i ~/.ssh/id_ed25519 -J azureuser@<operator-vm> "admin@$SLI"Cada parte de esa línea de comandos es fundamental, y las tres secciones siguientes explican qué fallo previene cada una.
No hay prompt de shell al que llegar: el shell de inicio de sesión de admin es el Site CLI, por lo que se llega
a su prompt >>>. Ejecute los comandos en la caja como execcli <name> allí — consulte
comandos en la caja.
Por qué cloud-init escribe la clave, y no la API
Sección titulada «Por qué cloud-init escribe la clave, y no la API»admin_user_credentials.ssh_key en el objeto del sitio parece exactamente el campo para
esto. Se acepta, sobrevive a una lectura de vuelta, y no configura nada. vpm posee los
usuarios locales del nodo y declina tocar este — desde el propio log del nodo, tres veces
durante un solo arranque:
vpm users.go:165: Won't do any change for user admin (internal skip)Todo lo demás se deriva de esa línea. /var/home/admin/.ssh nunca existe, antes ni
después de que el sitio alcance ONLINE. La fecha de último cambio de la contraseña shadow de admin permanece en la fecha
de construcción de la imagen mientras vesbkp y vesopcon muestran la fecha actual, porque vpm configuró
esos dos y omitió admin. Y vpm no registra nada sobre ssh_key o authorized_keys en
ningún momento.
Por lo tanto, el archivo debe escribirse fuera de vpm. admin es uid 2202, integrado en la imagen
del nodo, por lo que existe antes de que cloud-init se ejecute y owner: admin:admin se resuelve en el momento
de la escritura — sin runcmd, sin corrección de propiedad:
- path: /var/home/admin/.ssh/authorized_keys permissions: "0600" owner: admin:admin content: | ${ssh_public_key}sshd siempre estuvo dispuesto. sshd -T reporta pubkeyauthentication yes, y admin
aparece en AllowUsers en ambos archivos sshd_config que vienen en el nodo. Nunca hubo
nada que habilitar — solo un archivo faltante.
Por qué responde en una sola dirección
Sección titulada «Por qué responde en una sola dirección»sshd se enlaza a 0.0.0.0:22, pero solo la dirección interna (SLI) está en la pila de red
del host de una forma en que sshd responderá. eth0 se renombra a-i-eth0 y no lleva ninguna
IP de host en absoluto — el plano de datos Argo posee esa interfaz, y la dirección de gestión/SLO que
habría llevado aparece en vhost0 en su lugar. Las otras dos NICs permanecen en la pila del host
bajo sus propios nombres.
Sondeado desde una VM dentro de la VNet, contra un CE:
dirección de gestión/SLO tiempo agotadodirección externa tiempo agotadodirección interna/SLI ABIERTO SSH-2.0-OpenSSH_8.7una dirección no utilizada tiempo agotado (control)Un sondeo contra la dirección por la que conoce el nodo, por tanto, devuelve exactamente lo que devuelve un grupo de seguridad cerrado. Nada lo está bloqueando; no hay listener en esa dirección.
Las direcciones públicas del CE no tienen listener en el puerto 22 tampoco, que es por qué el comando anterior
pasa por -J: una VM de operador dentro de la VNet, en la misma subred que las direcciones
SLI. Este despliegue construye una para ese propósito —
terraform output -raw client_vm_name la nombra.
El Site CLI necesita un terminal y un retorno de carro
Sección titulada «El Site CLI necesita un terminal y un retorno de carro»El shell de inicio de sesión de admin no es un shell. Es una aplicación go-prompt, que pone el
terminal en modo raw y lee pulsaciones de teclas en lugar de líneas. Cuatro consecuencias, cada
una de las cuales falla de una manera que parece un problema diferente:
| Mecánica | Qué ocurre sin ella |
|---|---|
Asignar un terminal (ssh -tt) | panic: no such device or address de go-prompt.NewStandardInputParser, que se lee como un appliance caído |
| Enviar un retorno de carro, no un salto de línea, para Enter | La línea nunca se envía, y la sesión se cierra al final de la entrada sin haber impreso nada |
| Mantener la entrada estándar abierta | La conexión termina antes de que el comando se haya renderizado, por lo que un comando que funciona parece silencioso |
| Escribir el texto del comando y el byte Enter por separado | El salto de línea aterriza en el búfer como un carácter literal y la CLI responde unknown command, lo que se lee como si el comando no existiera |
ssh host 'some-command' por tanto no funciona: el argumento es ignorado y el
prompt interactivo comienza de todas formas. Manéjelo como un terminal o no lo haga en absoluto.
scripts/sitecli_ssh_harvest.py es la implementación de referencia.
El banner es una verificación de salud gratuita
Sección titulada «El banner es una verificación de salud gratuita»Antes de escribir nada, el banner de inicio de sesión ya ha respondido varias de las preguntas en las que
de otro modo gastaría comandos. Desde f5-xc-ce-vm-01, arte ASCII e IP pública omitidos:
UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITEDAll actions performed on this device are audited
Using https://register.ves.volterra.ioOS: rhel-9.2024.6Memory: 32768MiBStorage: sda: 31GiBCPU: Model: Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz | CPUs: 8Software: crt-20250613-3382DNS: 168.63.129.16: OKNTP: SyncedUptime: 0 days, 5 hours, 20 minutesRegistration Status: PROVISIONEDSLO IP: 10.0.1.4/26WELCOME IN SITE CLIRegistration Status distingue un nodo que todavía está levantándose (PROVISIONING) de uno que ha
terminado (PROVISIONED). Software es la cadena de construcción que determina qué comandos existen.
DNS y NTP cubren las dos dependencias que rompen el registro primero, por lo que un nodo que
nunca se conectó normalmente ya le ha dicho por qué aquí — antes de que se necesiten
chronyc-sources o
dig.
Suministro del par de claves
Sección titulada «Suministro del par de claves»-
Genere un par de claves, si aún no tiene uno. Ed25519 en lugar de RSA: más corto, y aceptado por el
sshddel appliance.Ventana de terminal ssh-keygen -t ed25519 -C "ce-operator" -f ~/.ssh/id_ed25519 -
Apunte el despliegue hacia la mitad pública. El módulo raíz lee el archivo una vez y pasa la cadena hacia abajo a cada nodo:
terraform/terraform.tfvars ssh_public_key_path = "~/.ssh/id_ed25519.pub"ssh_public_keytoma el material en línea en su lugar, que es lo que usan las pruebas del plan. La mitad privada nunca sale de su estación de trabajo. -
Aplique. Lea la advertencia al principio de esta página primero — en un despliegue existente esto reemplaza las VMs CE.
Lo que esto no es
Sección titulada «Lo que esto no es»Cada uno de estos fue probado y descartado mientras la ruta todavía se creía imposible. Cada uno es lo suficientemente plausible como para costar un día.
| No es la causa | Cómo fue descartado |
|---|---|
| La credencial solo se aplica en el momento de la creación | sshd arranca aproximadamente 90 segundos después del primer arranque, antes de que exista el objeto del sitio. admin_user_credentials también está presente en ReplaceSpecType y se aplica en sitio. |
block_all_services | El cierre del puerto 22 en la dirección de gestión es idéntico ya sea que los servicios estén bloqueados o no. |
| Un salto de línea al final de la clave | Probado de ambas formas, sin cambios. Cloud-init de todas formas lo elimina, porque un bloque literal de otro modo renderizaría una segunda línea vacía. |
| Software CE antiguo, fijado | Reproducido en tres construcciones, incluida una con OpenSSH 9.9. |
Un admin_password faltante | Configurar admin_password junto con ssh_key en un CE desde cero no cambió nada. |
Las otras rutas
Sección titulada «Las otras rutas»ONLINE.