Мое решение немного более надежно. Поместите это в свой .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
(для нового или присоединенного сеанса).