Redis opera bajo un modelo cliente-servidor clásico, donde redis-server actúa como proceso persistente que gestiona la base de datos en memoria, mientras que redis-cli es una herramienta interactiva para emitir comandos al servidor. Su interacción depende de la configuración de autenticación, pero no siempre de la forma intuitiva.
Configuración inicial del servidor
Al iniciar el servidor con un archivo de configuración:
./bin/redis-server ./redis.conf
Si el archivo redis.conf contiene la directiva requirepass mySecret123, el servidor aplica protección por contraseña a todas las conexiones entrantes. Sin embargo, esto no implica que el cliente deba especificarla automáticamente al arrancar — solo se exige cuando se intenta ejecutar comandos tras la conexión.
Comportamiento del cliente sin credenciales
Ejecutar:
./bin/redis-cli -h 127.0.0.1 -p 6379
establece una conexión válida, pero cualquier comando (como INFO o GET) fallará con NOAUTH Authentication required hasta que se autentique explícitamente:
127.0.0.1:6379> AUTH "mySecret123"
OK
Modificación dinámica de la contraseña
Una vez autenticado con privilegios suficientes (por defecto, todos los clientes autenticados pueden usar CONFIG si no está restringido), es posible cambiar la contraseña en tiempo real:
127.0.0.1:6379> CONFIG SET requirepass "newPass@2024"
OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "newPass@2024"
Esta operación modifica la configuración activa del servidor, pero no persiste tras un reinicio a menos que también se actualice redis.conf. Esto explica por qué la contraseña original vuelve tras reiniciar el servicio si no se guarda en disco.
Autenticación desde la línea de comandos
El flag -a permite pasar la contraseña directamente al iniciar redis-cli:
./bin/redis-cli -h 127.0.0.1 -p 6379 -a "newPass@2024"
Sin embargo, los caracteres especiales como !, $, o ``` pueden ser interpretados por el intérprete de shell antes de llegar a Redis. Para evitarlo, se recomienda:
- Usar comillas dobles o simples alrededor de la contraseña.
- O bien omitir
-ay autenticarse manualmente conAUTHdentro de la sesión interactiva.
Por ejemplo, para una contraseña que contenga signos de exclamación:
./bin/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> AUTH "p@ss!w0rd!!!"
OK
Responsabilidades claras
No hay ambigüedad funcional: la lógica de autenticación reside exclusivamente en el servidor (redis-server). El cliente (redis-cli) es meramente un canal de comunicación — puede leer, modificar o consultar la configuración del servidor solo si ya está autenticado y tiene permisos. Esto es análogo a cómo una herramienta como psql permite alterar parámetros de PostgreSQL mediante ALTER SYSTEM, pero siempre bajo control del motor subyacente.