El acceso seguro y eficiente a servidores Linux es un pilar para cualquier SysAdmin, DevOps o consultor IT. La contraseña ha sido el método estándar por años, pero presenta límites graves en seguridad y eficiencia. Cada vez que tecleamos una contraseña, la exponemos a interceptaciones y ataques brute-force, ralentizando operaciones diarias. Gestionar incluso unos pocos servidores con credenciales repetitivas es frustrante. SSH (Secure Shell) ofrece una alternativa superior: autenticación de clave pública. Este método bloquea ataques brute-force antes de que comprometan 2.000 endpoints, y optimiza el flujo de trabajo para automatización con Ansible. En esta guía, te explico paso a paso cómo configurar SSH Linux sin password, desde la generación de claves hasta la gestión avanzada, incluyendo los errores que he visto al migrar 300 VMs a Proxmox para una organización sanitaria pública.
Requisitos Previos / Entorno de Prueba
Para seguir esta guía, necesitas dos servidores Linux (o una workstation Linux y un servidor remoto) con acceso SSH habilitado y un user con sudo. La distribución de referencia es Ubuntu 22.04, pero los conceptos aplican a cualquier distribución. Asegúrate de usar un usuario non-root. La SSH Linux sin password es nuestro objetivo, y veremos cómo implementarlo en un entorno real.
Funcionamiento de la Autenticación de Clave Pública
La autenticación de clave pública se basa en un par de claves criptográficas: clave privada y clave pública. La privada se genera en el cliente, debe permanecer secreta, protegida por permisos restrictivos y una passphrase. La pública se copia al servidor remoto.
Al conectar, el cliente envía un signal al servidor indicando que quiere autenticarse con una clave. El servidor cifra un mensaje usando la clave pública asociada a tu cuenta y lo envía al cliente. Solo tu clave privada correspondiente puede descifrar este mensaje. Si el cliente descifra el mensaje y envía la respuesta correcta, el servidor concede acceso. Esto elimina la transmisión de contraseñas en claro, reduciendo el riesgo de interceptación y ataques de fuerza bruta.
Generar Par de Claves con ssh-keygen
Primer paso: generar el par de claves SSH en el cliente. Usaremos el algoritmo Ed25519, más moderno y seguro que RSA, con mejor rendimiento y claves más pequeñas.
Abre la terminal en tu cliente y ejecuta:
ssh-keygen -t ed25519 -C "nombreusuario@hostname_cliente"
Te pedirá dónde guardar la clave (el default ~/.ssh/id_ed25519 es ideal) y si quieres una passphrase. Recomiendo poner una passphrase robusta. Aunque el objetivo es SSH Linux sin password en el servidor, la passphrase protege tu clave privada en el cliente. Si alguien accede a tu workstation, no podrá usar la clave sin la passphrase.
Este comando crea dos archivos en ~/.ssh/:
id_ed25519: tu clave privada.id_ed25519.pub: tu clave pública.
Copiar Clave Pública al Servidor Remoto
Una vez generado el par, copia la clave pública al servidor remoto. La herramienta más simple y segura es ssh-copy-id.
ssh-copy-id usuario_remoto@ip_servidor_remoto
Pedirá la contraseña del usuario remoto solo esta vez. ssh-copy-id crea ~/.ssh/ en el servidor remoto si no existe, ajusta los permisos y añade tu clave pública al archivo ~/.ssh/authorized_keys. Es el método preferido porque automatiza configuraciones y reduce errores.
Método Manual con authorized_keys
Si ssh-copy-id no está disponible, copia la clave manualmente. Requiere más atención a los permisos.
Para copiar la clave pública al servidor remoto y añadirla a authorized_keys, usa este comando:
cat ~/.ssh/id_ed25519.pub | ssh usuario_remoto@ip_servidor_remoto "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Este comando ejecuta varias acciones en el servidor remoto:
mkdir -p ~/.ssh: crea la directory.sshsi no existe.chmod 700 ~/.ssh: ajusta permisos para.ssh(lectura, escritura y ejecución solo para el propietario).cat >> ~/.ssh/authorized_keys: añade tu clave pública al archivoauthorized_keys.chmod 600 ~/.ssh/authorized_keys: ajusta permisos paraauthorized_keys(lectura y escritura solo para el propietario).
Permisos incorrectos hacen que SSH ignore la clave por seguridad, bloqueando el acceso SSH Linux sin password.
Verificar Conexión SSH
Tras copiar la clave, prueba la conexión al servidor remoto:
ssh usuario_remoto@ip_servidor_remoto
Accederás sin que te pidan la contraseña (solo la passphrase de la clave privada si la configuraste). Si te piden la contraseña del usuario remoto, hay un problema de configuración, probablemente los permisos.
Configurar ~/.ssh/config para Alias
Para simplificar el acceso, configura el archivo ~/.ssh/config en tu cliente. Permite definir alias para tus servidores, especificando user, host, port y la clave privada. Esto es útil cuando gestionas múltiples servidores, como en infraestructuras de 2.000 endpoints que he administrado para una PA.
Crea o modifica ~/.ssh/config (touch ~/.ssh/config && chmod 600 ~/.ssh/config):
Host servidor_web
Hostname 192.168.1.100
User usuario_web
IdentityFile ~/.ssh/id_ed25519
Host db_prod
Hostname 10.0.0.5
User usuario_db
Port 2222
IdentityFile ~/.ssh/clave_db_privada
Ahora puedes conectar con ssh servidor_web o ssh db_prod.
Permisos Correctos en .ssh
SSH es estricto con los permisos. Si ~/.ssh/ o authorized_keys tienen permisos demasiado abiertos, SSH ignora las claves por seguridad y pide la contraseña.
Asegúrate de tener estos permisos. En el cliente (clave privada):
chmod 600 ~/.ssh/id_ed25519
En el servidor remoto (directory y archivo authorized_keys):
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Estos comandos garantizan que solo el propietario pueda leer y escribir. Lee también: SSH Hardening Linux: Complete Guide 2026 (10 Critical Settings) para profundizar en seguridad SSH.
Usar ssh-agent para Evitar Passphrase Repetida
Si protegiste tu clave privada con una passphrase, ssh-agent la desbloquea una sola vez por sesión. ssh-agent gestiona tus claves privadas y las desbloquea cuando es necesario.
Para iniciar ssh-agent y añadir tu clave:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Introduce la passphrase. ssh-agent la mantendrá en memoria durante tu sesión, permitiendo SSH Linux sin password totalmente automático.
Conexión a Múltiples Servidores con Una Clave
Un gran beneficio de la autenticación de clave pública es usar la misma clave privada para acceder a varios servidores. Simplifica la gestión en ambientes donde un usuario necesita acceso a decenas o centenares de VMs. Copia la misma clave pública a todos los servidores usando ssh-copy-id o el método manual.
Errores Comunes y Resolución de Problemas
Cuando la autenticación de clave pública falla, el debug es fundamental. La opción -vvv de ssh es tu mejor herramienta, mostrando el proceso exacto de conexión.
ssh -vvv usuario_remoto@ip_servidor_remoto
Busca en el output:
Authentication methods that can continue: publickey,password: Métodos de autenticación que el servidor acepta.Trying private key: /home/usuario/.ssh/id_ed25519: SSH intenta usar tu clave privada.Authentication failed: publickey: La autenticación falló. Causas comunes:- Permisos erróneos: Revisa
~/.ssh/yauthorized_keysen el servidor, y la clave privada en el cliente. - Clave pública no presente: Verifica que tu clave esté en
authorized_keysen el servidor. - Usuario incorrecto: El user del comando
sshdebe coincidir con el del servidor. - Servidor SSH no configurado para claves: Revisa
/etc/ssh/sshd_configparaPubkeyAuthentication yesyAuthorizedKeysFile .ssh/authorized_keys.
Para más detalles sobre sshd_config, consulta la documentación oficial: OpenSSH sshd_config.
Conclusiones con Puntos Clave Operativos
Configurar SSH Linux sin password con autenticación de clave pública es un paso crítico para la seguridad y eficiencia IT. No es «si» implementarlo, es «cuando». Elimina vulnerabilidades de contraseñas, acelera accesos y prepara tu infraestructura para automatización con Ansible. Protege tu clave privada con passphrase y mantén los permisos .ssh estrictos. Estas prácticas garantizan un ambiente seguro y productivo, reduciendo riesgos de incidentes y optimizando tu tiempo.