Si tengo un servidor A en el que puedo iniciar sesión con mi clave ssh y tengo la capacidad de "sudo su - otheruser", pierdo el reenvío de claves, porque las variables env se eliminan y el usuario original solo puede leer el socket. ¿Hay alguna forma de que pueda unir el reenvío de claves a través del "sudo su - otheruser", para poder hacer cosas en un servidor B con mi clave reenviada (git clone y rsync en mi caso)?
La única forma en que puedo pensar es agregar mi clave a las claves autorizadas de otheruser y "ssh otheruser @ localhost", pero eso es engorroso para cada combinación de usuario y servidor que pueda tener.
En breve:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).

user2anterior esroot! De lo contrario,user2tendrá SSH_AUTH_SOCK configurado correctamente, perouser2no podrá acceder, por ejemplo, / tmp / ssh-GjglIJ9337 /.roottiene ese acceso. Por lo tanto, esto puede resolver parte del problema, pero no los OP: " y el usuario solo puede leer el socket"Defaults>root env_keep+=SSH_AUTH_SOCKDebe asegurarse de que solo se reenvíe cuando sudo a la raíz. No quiere hacer eso de todos modos a otros usuarios por razones de seguridad. Mejor ejecute un agente ssh separado para otro y agregue las claves apropiadas.sudo su -no funciona para mí, presumiblemente no puede preservar el medio ambiente porque no estásudoen el inicio del shell.sudo suparece funcionar.sudo sutodos modos. Si necesita un shell raíz, para eso essudo -sosudo -ipara qué sirve.Esto le dará un shell raíz con las claves originales aún cargadas.
fuente
Permita que otro usuario acceda al
$SSH_AUTH_SOCKarchivo y su directorio, por ejemplo, mediante la ACL correcta, antes de cambiar a ellos. El ejemplo asumeDefaults:user env_keep += SSH_AUTH_SOCKen la/etc/sudoersmáquina host:Más seguro y funciona también para usuarios no root ;-)
fuente
otherusertambién pueden usar su autenticación ssh.rwxy norw(oren absoluto)?man 7 unix: en Linux, la conexión al socket requiere permisos de lectura y escritura en ese socket. También necesita buscar (ejecutar) y escribir permiso en el directorio donde crea el socket o solo buscar (ejecutar) permiso cuando se conecta a este socket. Entonces, en la respuesta anterior, el permiso de ejecución en el socket es redundante.sudo -u otheruser --preserve-env=HOME -sHe descubierto que esto también funciona.
Como otros han señalado, esto no funcionará si el usuario al que se está cambiando no tiene permisos de lectura en $ SSH_AUTH_SOCK (que es prácticamente cualquier usuario además de root). Puede evitar esto estableciendo $ SSH_AUTH_SOCK y el directorio en el que se encuentra para tener los permisos 777.
Sin embargo, esto es bastante arriesgado. Básicamente, le está dando permiso a todos los demás usuarios del sistema para usar su Agente SSH (hasta que cierre la sesión). También puede configurar el grupo y cambiar los permisos a 770, lo que podría ser más seguro. Sin embargo, cuando intenté cambiar el grupo, obtuve "Operación no permitida".
fuente
Si está autorizado para hacerlo
sudo su - $USER, probablemente tenga un buen argumento para que se le permita hacer unassh -AY $USER@localhost, con su clave pública válida en el directorio de inicio de $ USER. Entonces su reenvío de autenticación se llevaría a cabo con usted.fuente
Siempre puede simplemente ssh a localhost con reenvío de agente en lugar de usar sudo:
La desventaja es que necesita iniciar sesión nuevamente, pero si lo está utilizando en una pestaña screen / tmux, eso es solo un esfuerzo de una vez, sin embargo, si se desconecta del servidor, el socket se romperá (por supuesto) nuevamente . Por lo tanto, no es ideal si no puede mantener su sesión screen / tmux abierta en todo momento (sin embargo, puede actualizar manualmente su
SSH_AUTH_SOCKenv var si es genial).También tenga en cuenta que cuando usa el reenvío ssh, el root siempre puede acceder a su socket y usar su autenticación ssh (siempre que haya iniciado sesión con el reenvío ssh). Así que asegúrese de poder confiar en la raíz.
fuente
otherusertravés de ensudolugar de a través de SSH (por ejemplo, si desea SCP cosas comowww-data)No lo uses
sudo su - USER, sino más biensudo -i -u USER. ¡Funciona para mi!fuente
Sudo version 1.6.9p17corriendo en Debian Lenny. Pruebasudo -s?sudo -snisudo -ifunciona para mí ...Combinando información de las otras respuestas se me ocurrió esto:
Me gusta esto porque no necesito editar el
sudoersarchivo.Probado en Ubuntu 14.04 (tuvo que instalar el
aclpaquete).fuente
Creo que hay un problema con la
-opción (guión) despuéssude su comando:Si lee la página de manual de su , puede encontrar que la opción
-, -l, --logininicia el entorno de shell como shell de inicio de sesión. Este será el entornootheruserindependientemente de las variables env donde se ejecutesu.En pocas palabras, el tablero socavará cualquier cosa de la que haya pasado
sudo.En su lugar, deberías probar este comando:
Como señaló @ joao-costa,
-Epreservará todas las variables en el entorno donde se ejecutósudo. Luego, sin el tablero,suutilizará ese entorno directamente.fuente
Desafortunadamente, cuando le sumas a otro usuario (o incluso usas sudo) perderás la capacidad de usar tus claves reenviadas. Esta es una característica de seguridad: no desea que usuarios aleatorios se conecten a su agente ssh y usen sus claves :)
El método "ssh -Ay $ {USER} @localhost" es un poco engorroso (y como se señaló en mi comentario sobre la respuesta de David propenso a la rotura), pero es probablemente lo mejor que puede hacer.
fuente
-ay-Aargumentos.-ahace exactamente lo contrario de lo que se pretende, ¡deshabilita el reenvío de agentes! Entonces, bajo la versión reciente (y posiblemente toda) de Ubuntu, use-Apara habilitar el reenvío de agentes.