
Tengo un par de claves pública-privada que ~/.ssh
se utiliza para la conexión SSH a GitHub.
Para probar si configuré SSH con GitHub correctamente, usé , que funciona bien.ssh -T [email protected]
Además, si ejecuto el comando anterior como superusuario, funciona bien.
su
ssh -T [email protected]
Sin embargo, cuando uso sudo, el comando no funciona. Sospecho que no puede acceder al par de claves almacenado cuando ~/.ssh
se ejecuta consudo
El siguiente comando falla.
sudo ssh -T [email protected]
Puede replicar fácilmente el problema con cualquier distribución de Ubuntu yestePágina de ayuda de GitHub.
Editar:
Entiendo que puedo pasar la clave privada a ssh
lo siguiente:
ssh -i <path-to-private-key> -T [email protected]
Me pregunto por qué el uso hace que la clave privada sea inaccesible.sudo ssh -T [email protected]
Respuesta1
Hipótesis: hay un agente de autenticación ejecutándose para su usuario habitual y el agente tiene la clave.
ssh
generado a partir de un shell no elevado hereda la variable de entorno crucial SSH_AUTH_SOCK
que le indica la ubicación del socket para comunicarse con el agente. ssh
puede usar el agente, así es como normalmente usa un agente.
su
no desarma la variable. ssh
after su
es capaz de localizar el socket gracias a la variable. Normalmente, otros usuarios que no sean el propietario no pueden acceder al socket, pero ahora ssh
se ejecuta como root y el root puede acceder a (casi) cualquier archivo independientemente de sus permisos.
sudo
hacedesarmar la variable (por defecto; veresteyeso). ssh
in sudo ssh …
no puede localizar el enchufe. Es como si el agente no estuviera allí. ssh
intenta encontrar la clave privada correcta en algunas ubicaciones predeterminadas en ~/.ssh
, pero ahora busca en el directorio de inicio de la raíz, no en el directorio de inicio de su usuario habitual, donde está la clave privada correcta.
Respuesta2
Puede pasar la ruta a su archivo de identidad con la opción -i a ssh.
ssh user@host -i /path/to/keyfile