При следующей настройке вам не понадобится никакой оболочки для вызова screen
. Кроме того, он избегает использования /tmp
(с вытекающими отсюда рисками безопасности).
Убедитесь, что у вас есть каталог ~ / tmp:
mkdir ~/tmp
Добавьте к
.screenrc
следующей строке:setenv SSH_AUTH_SOCK "$HOME/tmp/ssh-agent-screen"
- Это гарантирует, что внутри
screen
,ssh
ищет сокет всегда в одном и том же месте, а не по изменяющемуся пути. - Вы должны использовать
setenv
любую оболочку, которую используете, так как это экран, а не команда оболочки.
- Это гарантирует, что внутри
Добавьте к
.bash_profile
следующей строке:[ -n "$SSH_AUTH_SOCK" ] && [ "$SSH_AUTH_SOCK"!="$HOME/tmp/ssh-agent-screen" ] && ln -sf "$SSH_AUTH_SOCK" "$HOME/tmp/ssh-agent-screen"
- Это будет связывать фиксированное местоположение (где
ssh
выглядит) с реальным, и должно появиться после запускаssh-agent
. - Использование
[ -n "$SSH_AUTH_SOCK" ]
будет правильно предотвращать ошибки, когдаSSH_AUTH_SOCK
не установлено. [ "$SSH_AUTH_SOCK"!="$HOME/tmp/ssh-agent-screen" ]
предотвратит сеансы экрана, связывающие $ HOME / tmp / ssh-agent-screen с самим собой, если источники экрана.bash_profile
.
- Это будет связывать фиксированное местоположение (где
- Вместо того чтобы начать
ssh-agent
в.bash_profile
, вы можете рассмотреть возможность соединения сssh -A
(использовать перенаправление агента и сделать удаленный компьютер использовать агент).
После этой настройки вы можете просто использовать стандартную экранную команду. Вам нужно будет только воссоздать существующие сеансы или вручную установить SSH_AUTH_SOCK внутри них в фиксированное положение шага 2.
Кредиты на этот сайт для идеи; Я избегал использования /tmp
. Этот ответ похож, но использует дополнительные псевдонимы.