GNU Screen и форвардинг SSH-агента

2011.09.13

Проблема: при повторном подключении к сессии GNU Screen перестаёт работать форвардинг аутентификации.

Причина: для форвардинга используется сокет, имя которого указано в переменной окружения SSH_AUTH_SOCK.  Переменная инициализируется при подключении по SSH, то есть, грубо говоря, в момент запуска screen.  При подключении к существующей сессии переменные окружения не меняются, а сокет нужно использовать уже другой.

Решение: создать в ~/bin скрипт ssh, который будет подсовывать в переменную SSH_AUTH_SOCK актуальное значение (имя последнего созданного сокета), затем запускать настоящий sshПример скрипта:

#!/bin/sh
export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name "agent.*" -user $USER 2>/dev/null | head -1)
COMMAND=/usr/bin/$(basename $0)
if [ -x "$COMMAND" ]; then
    $COMMAND $*
else
    echo "Oops: no $COMMAND"
    exit 1
fi

Результат использования: пароль не спрашивают, rsync и скрипты, его использующие, работают как положено: молча.

Следить за развитием событий можно через RSS ленту или почтовую рассылку.