Я видел много хаков для восстановления контакта с агентом SSH сеанса GUI из сеансов tmux (и screen). Интересно, можно ли отделить GUI и создать агента ssh исключительно для использования в данном сеансе tmux? Должен ли сам агент "использовать" одно из окон tmux, чтобы его не убили, или возможно создать его в фоновом режиме, который будет существовать, пока сеанс жив?
решение1
Хорошо, я немного покопался и должен иметь возможность легко подключиться к любому SSH_AGENT, который есть, когда подключен терминал. tmux уже предоставляет ключевую конфигурацию "update-environment", однако недостающая часть заключается в том, что существующие оболочки не обновляются магическим образом. Однако tmux отслеживает обновленные переменные среды, поэтому скрипт обновления намного менее хакерский, чем экраны:
# Sync the environment of an existing shell
#
# tmux already updates the environment according to
# the update-environment settings in the config. However
# for existing shells you need to sync from from tmux's view
# of the world.
function tmux_sync_env
{
external_env=`tmux showenv | grep -v "^-"`
export ${external_env}
}
Из этогосовершить
решение2
Мне пришлось изменить @stsquadотвечать. У меня это не получилось, потому что export
команда не смогла установить SSH_CONNECTION
переменную.
Мне пришлось заключить значение SSH_CONNECTION
в кавычки.
function tmux_sync_env
{
ssh_auth_sock=`tmux showenv | grep "^SSH_AUTH_SOCK"`
ssh_connection=`tmux showenv | grep "^SSH_CONNECTION"`
export ${ssh_auth_sock}
export "${ssh_connection}"
}
решение3
Другой вариант, который я недавно нашел, — это Дэниел РоббинсБрелокУтилита, которая предлагает удобный способ повторного подключения и использования агента на уровне пользователя/хоста, а не только на уровне сеанса.