GNU/Linux >> Tutoriales Linux >  >> Linux

¿Tengo que restablecer Env Vars en Tmux cuando vuelvo a conectar?

Principalmente trabajo en una Mac y ssh/tmux adjunto a una máquina Linux para hacer mi trabajo. Tengo ssh-agent ejecutándose en la máquina Linux. tengo

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

en mi .tmux.conf . Sin embargo, cada vez que vuelvo a conectarme a esta sesión, tengo que ejecutar

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

para que las nuevas ventanas tmux tengan $SSH_AUTH_SOCK configurar correctamente. Preferiría no tener que hacer esto. ¿Alguna idea?

Actualizar

Creo que no me estoy explicando bien. Aquí está mi función de shell para abrir un shell en una máquina remota:

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

Cuando tmux ejecuta este comando ssh, $SSH_AUTH_SOCK es no establecido, aunque es ambientado en mi entorno local. Si pongo esto en el entorno de tmux con el setenv comando anterior, todo funciona bien. Mi pregunta es, ¿por qué tengo que ejecutar el comando setenv?

Actualización 2

Más información:

Cuando me adjunto a una sesión existente, $SSH_AUTH_SOCK no está configurado en el entorno tmux (o entorno global).

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

Si lo configuro manualmente, las cosas funcionan:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

Si separo y vuelvo a conectar, $SSH_AUTH_SOCK vuelve a no estar configurado.

Respuesta aceptada:

Desde que recibí el Bounty, volveré a publicar mi comentario clave para que esté completo y para evitar que los visitantes con el mismo problema sigan el camino equivocado:

Tmux eliminará las variables de entorno

La página de manual de Tmux establece que update-environment eliminará las variables “que no existen en el entorno de origen […] como si se hubiera dado -r al comando set-environment”.

Aparentemente eso fue lo que causó el problema. Vea la respuesta de Chris a continuación. Sin embargo, todavía no puedo imaginar cómo la variable podría estar ausente en el "entorno de origen" y, sin embargo, ser válida en la ventana tmux recién creada...

Respuesta anterior:

Cómo funciona el reenvío SSH

En la máquina remota, eche un vistazo al entorno de su shell después de establecer la conexión SSH:

[email protected]:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

El importante aquí es SSH_AUTH_SOCK, que actualmente está configurado en algún archivo en /tmp. Si examina este archivo, verá que es un socket de dominio Unix y está conectado a la instancia particular de ssh a la que se conectó. Es importante destacar que esto cambia cada vez que te conectas.

Tan pronto como cierre la sesión, ese archivo de socket en particular desaparecerá. Ahora, si va y vuelve a conectar su sesión tmux, verá el problema. Tiene el entorno de cuando se lanzó originalmente tmux, que podría haber sido hace semanas. Ese enchufe en particular murió hace mucho tiempo.

Relacionado:¿prueba de shell si la cadena de varias líneas contiene un patrón especificado en la última línea?

Solución

Ya que sabemos que el problema tiene que ver con saber dónde está el socket de autenticación SSH activo actualmente, ¡coloquémoslo en un lugar predecible!

En su archivo .bashrc o .zshrc en la máquina remota, agregue lo siguiente:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

No creo que tengas que poner un "comando de entorno de actualización" en tu tmux.conf. De acuerdo con la página del manual, SSH_AUTH_SOCK ya está cubierto de forma predeterminada.

Crédito

Mi respuesta es un extracto de esta publicación de blog de Mark 'xb95' Smith, quien explica el mismo problema para la pantalla.


Linux
  1. ¿Cómo ejecutar un equivalente de `head -z` cuando no tengo disponible la opción `-z`?

  2. ¿Api del zócalo de Tmux?

  3. ¿Cómo configurar Bashrc para cerrar todas las sesiones de Tmux cuando cierro la terminal?

  4. Cuando se usa Putty, ¿alt-izquierda/derecha es diferente cuando Byobu se inicia automáticamente desde el perfil?

  5. Evitar que el panel/ventana se cierre cuando se complete el comando:¿Tmux?

Inicio automático de la sesión de Tmux en el sistema remoto al iniciar sesión a través de SSH

Cómo instalar tmux en Linux

¿Cómo cargar Ubuntu cuando todo lo que tengo es Grub?

¿Cómo instalar VIM en Linux cuando no tengo permisos de root?

¿Cómo analizo la salida del comando de búsqueda cuando los nombres de archivo tienen espacios en ellos?

¿Cuánto tiempo tienen que salir los demonios cuando se recibe la señal de apagado del servidor?