GNU Screen и форвардинг SSH-агента
Проблема: при повторном подключении к сессии 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 ленту или почтовую рассылку.