Ver «secretos no válidos» suele llevar a una conclusión: a la VPN no le gusta la puntuación. Esa conclusión casi siempre es errónea, porque el mensaje suele venir del procesamiento local antes de que ninguna puerta de enlace haya mirado la cuenta. Dos diseños entregan la misma contraseña, un campo gráfico y un archivo de credenciales, y fallan en lugares distintos. Compare los contenedores antes de simplificar una contraseña que siempre estuvo bien.

El error llega antes que la puerta de enlace

La validación local, un almacén de secretos bloqueado, un agente ausente y un archivo de credenciales mal formado producen fallos que el usuario vive como un solo rechazo. Ninguno de ellos involucra al servidor de autenticación. El rechazo de la propia puerta de enlace es un evento distinto, y suele llegar con otro mensaje y en otro momento. Ocurre después de que exista un túnel y de que se hayan transmitido las credenciales.

Así que la primera pregunta no es qué caracteres son legales, sino dónde se detuvo el intento. Un cliente que nunca abrió una conexión no ha sido rechazado por nadie. Anote la etapa que observó, porque cada paso posterior depende de esa clasificación.

La distinción también cambia quién lo arregla. Un problema de contenedor pertenece al dispositivo y a su dueño, mientras que un rechazo de cuenta pertenece a quien opera el backend de autenticación.

Compare los contenedores, no los caracteres

Un campo de contraseña gráfico, una entrada del llavero, un archivo de credenciales de dos líneas y un secreto de automatización llevan cada uno el mismo valor en un sobre distinto. El sobre tiene sus propias reglas, y esas reglas son las que suelen romperse. El valor rara vez es el problema; el transporte del valor sí lo es. Mantenga las dos ideas separadas y el diagnóstico será más corto.

Where the value stopsWhat you seeWhat you checkWho owns the fix
GUI field or managed profileA validation message before any connection opensThe selected authentication mode and whether the field holds the secret or the usernameThe device owner or the profile author
Keychain or secret agentA prompt that keeps reappearing, or an agent errorWhether the agent is unlocked and holds an entry for this profileThe user who owns the keychain
Two-line credential fileA prompt for a password that was already suppliedLine count, line order and whether a trailing newline is presentWhoever generated the file
Shell argument or environmentWorks interactively but fails in automationWhether the shell expanded, trimmed or logged the valueWhoever wrote the automation

Opciones de cliente de OpenVPN 2.6 de la comunidad describen ese archivo de dos líneas para auth-user-pass, incluido el comportamiento cuando falta la línea de la contraseña: entonces el cliente la pide. Ese único detalle explica toda una clase de informes del tipo «me pide una contraseña que ya he introducido». También le dice que una segunda línea vacía es un estado significativo y no una elección de formato inofensiva.

Las comillas son otra capa aparte: las comillas dentro de un archivo de credenciales normal se guardan como datos, mientras que un intérprete de órdenes las elimina antes de que el programa vea nada. El mismo carácter es inofensivo en un sitio y estructural en el otro. Una tabla no puede decirle qué contenedor usó su cliente, así que lea la configuración del propio cliente antes de elegir una fila.

Los saltos de línea también son estructurales. Un archivo con campos delimitados por líneas no puede llevar un valor que contenga un salto de línea, y eso es una limitación del formato, no un juicio sobre la fuerza de la contraseña. Use el mecanismo de entrega que admite el despliegue en lugar de recortar el secreto para que quepa en un archivo improvisado.

Cree el archivo de credenciales sin daños del intérprete

La ruta local más segura mantiene el secreto fuera del historial del intérprete y fuera de la lista de argumentos del proceso. Lea ambos campos de forma interactiva y luego escriba las dos líneas que el cliente espera. Todo lo demás puede quedarse en un archivo de configuración fácil de revisar.

read -r VPN_USER
read -rs VPN_PASS
printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS" > /etc/openvpn/client/creds
chmod 600 /etc/openvpn/client/creds
openvpn --config /etc/openvpn/client/office.conf --auth-user-pass /etc/openvpn/client/creds

Los dos primeros comandos leen el nombre de usuario y luego la contraseña sin mostrarla, el tercero escribe ambas líneas, el cuarto restringe el archivo y el último inicia el cliente con ese archivo. Fíjese en que read -r conserva las barras invertidas, y ese es justo el tipo de detalle que convierte una contraseña que funciona en una que falla cuando se omite.

Evite construir el archivo con una variable sin comillas o con un here-document lleno de expansiones del intérprete. Ambos pueden transformar caracteres antes de que lleguen al archivo, y el fallo resultante parece un rechazo de la VPN porque la contraseña del disco es realmente distinta de la que usted conoce. Si lo sospecha, compare la longitud en bytes del archivo con el valor esperado, sin imprimir el secreto. Una diferencia de uno o dos bytes es la firma de un accidente de comillas.

Lea la etapa en el primer error

Conserve el primer mensaje concreto de un intento y luego clasifíquelo. Un error de validación local, una clave privada ausente, un agente de secretos no disponible y un fallo de autenticación en la puerta de enlace son cuatro resultados distintos con cuatro dueños distintos. Solo uno de ellos trata de la cuenta.

Si la puerta de enlace rechaza de verdad una credencial entregada correctamente, revise la cuenta, el backend de autenticación y cualquier desafío requerido con el administrador. Un fallo de autenticación genérico no nombra ningún carácter prohibido.

Restaure el valor aprobado mediante el mecanismo correcto en lugar de reducirlo a letras y dígitos. La política de contraseñas pertenece al operador, y un rodeo que la incumple en silencio no es una corrección. También oculta el defecto real a la siguiente persona, que se encontrará el mismo error con una contraseña más débil y sin mejores ideas.

Artículos relacionados