Мое решение немного более надежно.  Поместите это в свой .bash_profile на удаленной стороне.
if [ -z "${STY}" -a -t 0 ]; then
    reattach () {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-screen"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-screen" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
fi
Тогда я использую reattach вместо screen .  Это можно сделать с помощью command screen -A ${1:+"$@"} и «screen» вместо «reattach».
Проблема с использованием решения «псевдоним» в ответе @David Mackintosh заключается в том, что процессы, запущенные на экране, теперь имеют одинаковое значение SSH_AUTH_SOCK на удаленной стороне.  Подумайте о следующем scenerio.
- local: запуск агента SSH, получающего значение SSH_AUTH_SOCK
- local: SSH для удаленного, установка нового значения SSH_AUTH_SOCKдля удаленного
- удаленный: стартовый screenилиtmux, используя SSH_AUTH_SOCK
- remote: создать оболочку, которая наследует SSH_AUTH_SOCK с screen
- удаленный: отсоединиться от экрана и выйти
- local: SSH для удаленного, установка нового значения SSH_AUTH_SOCKдля удаленного
- remote: повторно подключиться к сеансу экрана, который все еще имеет старое значение SSH_AUTH_SOCK
Хитрость заключается в том, чтобы заставить процессы, работающие внутри экрана, использовать новое значение.  Вы можете сделать это, повторно назначая символическую ссылку на текущий SSH_AUTH_SOCK каждый раз, когда вы вызываете screen (для нового или присоединенного сеанса).