Skip to content

Instantly share code, notes, and snippets.

@Farzy
Created July 16, 2011 11:34
Show Gist options
  • Save Farzy/1086282 to your computer and use it in GitHub Desktop.
Save Farzy/1086282 to your computer and use it in GitHub Desktop.
Generate a correct SSH_AUTH_SOCK variable in a reconnected "screen" shell
# Cette fonction permet de récupérer dans un screen détaché et réattaché
# la connexion à l'agent d'authentification SSH ainsi que le DISPLAY X11
# s'il a été défini (respectivement "ssh -A" et "ssh -X").
function ssh-screen-auth() {
# Variables locales dont un tableau
local SCREENPID SOCK DISP
local -a SCREENPIDS
# Cherche le pid de screen et vérifie qu'il n'y a qu'un seul screen,
# s'il y en a plusieurs on ne sait pas les choisir.
SCREENPIDS=($(pgrep -f "screen -(r|dr|DR)" -u $UID))
if [ ${#SCREENPIDS[*]} -ne 1 ]; then
echo "Il y a plusieurs sessions screen en cours pour l'utilisateur ${USER}(${UID})"
return 1
fi
SCREENPID=${SCREENPIDS[1]}
# On récupère les variables d'environnement SSH_AUTH_SOCK et DISPLAY,
# si elles existent, dans l'environnement du processus "screen" et on
# les réinjecte dans le shell courant.
SOCK=$(sudo cat /proc/${SCREENPID}/environ | tr "\0" "\n" | grep SSH_AUTH_SOCK)
if [ -n "${SOCK}" ]; then
eval $SOCK
export SSH_AUTH_SOCK
fi
DISP=$(sudo cat /proc/${SCREENPID}/environ | tr "\0" "\n" | grep DISPLAY)
if [ -n "${DISP}" ]; then
eval $DISP
export DISPLAY
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment