Este tutorial rápido le muestra cómo corregir el error ssh "sign_and_send_pubkey:firma fallida:el agente rechazó la operación Permiso denegado (clave pública)" en Linux.
Si intenta conectarse al servidor remoto a través de SSH, es posible que encuentre un error de permiso denegado. Este error puede ocurrir por varias razones. Y la solución a este problema depende de la razón exacta detrás del error.
En mi caso, tenía las claves pública y privada almacenadas en mi escritorio Ubuntu 16.04. Después del lanzamiento de Ubuntu 18.04, decidí actualizar a esta versión más nueva. Prefiero una instalación nueva a las actualizaciones de distribución.
Entonces, hice una copia de seguridad de las carpetas principales de mi directorio de inicio, incluida la carpeta .ssh que tenía claves públicas y privadas en un disco externo.
Una vez instalado, habilité SSH en Ubuntu 18.04 y restauré todo, incluidas las claves SSH.
Ahora, cuando intenté conectarme al servidor remoto usando ssh, pensé que funcionaría de inmediato porque tenía las mismas claves públicas y privadas.
Pero no funcionó. SSH me dio este error:
sign_and_send_pubkey: signing failed: agent refused operation
[email protected]: Permission denied (publickey).
Si se encuentra en una situación similar en la que copió sus claves SSH de otra fuente, permítame mostrarle cómo solucionar este error de SSH.
Permisos de archivo correctos en la carpeta ~/.ssh y su contenido
Como regla general, puede establecer los siguientes permisos en el directorio ssh y sus archivos (claves privadas, claves públicas, hosts_conocidos, archivo de configuración ssh, etc.)
Elemento | Permiso |
directorio .ssh | 700 ((drwx------) |
claves públicas | 644 (-rw-r--r--) |
claves privadas | 600 (-rw-------) |
claves_autorizadas | 600 (-rw-------) |
hosts_conocidos | 600 (-rw-------) |
configuración | 600 (-rw-------) |
Es posible que no tenga todos los archivos, pero debe tener claves públicas y privadas aquí.
Ahora veamos cómo cambiar el permiso de archivo en las claves ssh y otros archivos.
Error de reparación de permiso denegado (clave pública)
Entonces, el problema radica en los permisos de archivo aquí. Verá, cuando copié los archivos, el USB estaba en el formato de archivo FAT de Microsoft. Este archivo no es compatible con los permisos de archivo de UNIX/Linux.
Y por lo tanto, los permisos de las claves ssh copiadas se cambiaron a 777.
Para SSH, los permisos de archivo son demasiado abiertos. Simplemente no está permitido tener permisos 777 en las claves públicas o privadas. Y es por eso que SSH rechazó la conexión aquí.
ls -l .ssh
-rwxrwxrwx 1 abhishek abhishek 1766 Nov 12 2017 id_rsa
-rwxrwxrwx 1 abhishek abhishek 398 Nov 12 2017 id_rsa.pub
-rwxrwxrwx 1 abhishek abhishek 4214 Sep 21 21:39 known_hosts
La clave privada debe tener permisos de lectura y escritura solo para el usuario y ningún otro permiso para el grupo y otros.
Debe cambiar el permiso usando el comando chmod:
chmod 600 ~/.ssh/id_rsa
Del mismo modo, la clave pública no debería tener permisos de escritura y ejecución para grupos y otros.
chmod 644 ~/.ssh/id_rsa.pub
Ahora que ha asignado los permisos correctos, puede conectarse a ssh nuevamente. En este momento, le pedirá su contraseña de administrador para desbloquear las claves. Ingrese su contraseña de administrador y debería estar listo para comenzar.
Esto también me enseñó una lección de que copiar y pegar archivos es una mala idea y se debe hacer una copia de seguridad adecuada, de lo contrario, todos los archivos tendrán los peligrosos permisos 777. Tuve que cambiar recursivamente los permisos de archivo en todo el directorio de inicio y créeme, no fue algo agradable de hacer.
Como dije antes, puede haber varias razones para este error. Para el problema relacionado con el permiso de archivo abierto, esta solución debería ayudarlo a corregir el error Permiso denegado (clave pública) con SSH. Si está interesado, puede leer más sobre los conceptos básicos de SSH.
Déjame saber en la sección de comentarios si la solución funcionó para ti o no. También sugiere tu opinión sobre la copia de claves ssh en otras computadoras.