57 votes

Comment faire pour que screen se connecte automatiquement à l'agent ssh actuel lorsqu'il se rattache à un screen existant ?

Si vous démarrez une session écran pendant que ssh-agent est en cours d'exécution (à partir de ssh -A agent forwarding), l'accès à ssh-agent fonctionne bien. Cependant, si vous vous détachez de cette session, que vous vous déconnectez, que vous vous reconnectez (avec le transfert de ssh-agent) et que vous vous reconnectez à votre session écran, l'accès à ssh-agent ne fonctionne pas.

Comment peut-on y remédier ?

0voto

d33tah Points 1203

J'ai parcouru les autres réponses et je n'ai pas trouvé la mienne. Voici ce que j'utilise. Créez un fichier ~/.screenrc-wrapper avec le contenu suivant :

escape ^xx
bindkey ^Ad detach

Et ajoutez ceci à votre ~/.bashrc (o ~/.zshrc si vous l'utilisez) :

  if echo $TERM | grep -v 'screen' && ! screen -x -SU wrapper; then
      if echo $TERM | grep -v 'screen' && ! screen -x -SU main; then
      screen -c ~/.screenrc-wrapper -SU wrapper ssh-agent screen -SU main
      fi
  fi

De cette façon, vous utiliserez deux sessions d'écran - l'une est "enveloppante" et l'autre est l'interne. Cette dernière restera en vie même si vous vous déconnectez et ssh-agent restera actif. Une autre caractéristique intéressante est qu'il se souviendra de votre configuration de fenêtre - si vous utilisez des fenêtres divisées, cela peut être très pratique.

Vous pouvez trouver cette fonctionnalité dans son contexte dans mon Dotfiles .

0voto

Chris Points 2555

En tant qu'utilisateur de poisson Shell, l'ajout de ce petit extrait à ma fonction d'invite fait très bien l'affaire.

        if test -n $SSH_AUTH_SOCK -a ! -S $SSH_AUTH_SOCK
                # SSH_AUTH_SOCK is obsolete and needs to be reset to the new socket
                export SSH_AUTH_SOCK=(ls /tmp/ssh-*/agent.*)
        end

Comme elle est évaluée lorsque l'invite est rafraîchie, elle ne fonctionnera pas dans la première commande que j'utilise immédiatement après avoir rejoint mon écran qui nécessite l'agent ssh, mais tout rafraîchissement (y compris le simple fait d'appuyer sur Entrée), assurera que le sock est mis à jour avec la nouvelle version.

0voto

OMS Points 1

J'arrive un peu tard pour me joindre à la fête, mais voici un extrait que je viens de réaliser pour ce projet.

# Magic re-screen
alias rscreen='sudo gdb -p $(ps -o pid= --ppid $(screen -ls | grep pts | awk -F"." "{print \$1}")) -ex "call (int) setenv(\"SSH_AUTH_SOCK\", \"${SSH_AUTH_SOCK}\", 1)" -ex "detach" -ex "q" >/dev/null; screen -dr'

En gros, je trouve simplement le fils SCREEN (bash) et je change sa variable SSH_AUTH_SOCK pour qu'elle corresponde à celle de la session en cours. On peut probablement rendre cela plus intelligent (choisir quel écran rattacher), mais honnêtement, c'est suffisant pour 90% du temps (pour moi en tout cas).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X