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).
user2
anterior esroot
! De lo contrario,user2
tendrá SSH_AUTH_SOCK configurado correctamente, perouser2
no podrá acceder, por ejemplo, / tmp / ssh-GjglIJ9337 /.root
tiene 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_SOCK
Debe 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ásudo
en el inicio del shell.sudo su
parece funcionar.sudo su
todos modos. Si necesita un shell raíz, para eso essudo -s
osudo -i
para 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_SOCK
archivo y su directorio, por ejemplo, mediante la ACL correcta, antes de cambiar a ellos. El ejemplo asumeDefaults:user env_keep += SSH_AUTH_SOCK
en la/etc/sudoers
máquina host:Más seguro y funciona también para usuarios no root ;-)
fuente
otheruser
también pueden usar su autenticación ssh.rwx
y norw
(or
en 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 -s
He 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_SOCK
env 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
otheruser
través de ensudo
lugar 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.9p17
corriendo en Debian Lenny. Pruebasudo -s
?sudo -s
nisudo -i
funciona para mí ...Combinando información de las otras respuestas se me ocurrió esto:
Me gusta esto porque no necesito editar el
sudoers
archivo.Probado en Ubuntu 14.04 (tuvo que instalar el
acl
paquete).fuente
Creo que hay un problema con la
-
opción (guión) despuéssu
de su comando:Si lee la página de manual de su , puede encontrar que la opción
-, -l, --login
inicia el entorno de shell como shell de inicio de sesión. Este será el entornootheruser
independientemente 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,
-E
preservará todas las variables en el entorno donde se ejecutósudo
. Luego, sin el tablero,su
utilizará 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
-a
y-A
argumentos.-a
hace 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-A
para habilitar el reenvío de agentes.