Já vi muitos hacks para restabelecer o contato com o agente SSH de uma sessão GUI a partir de sessões tmux (e screen). Estou me perguntando se é possível desacoplar da GUI e gerar um agente ssh exclusivamente para uso em uma determinada sessão do tmux. O próprio agente teria que "esgotar" uma das janelas do tmux para evitar ser morto ou é possível gerar uma em segundo plano que persista enquanto a sessão estiver ativa?
Responder1
OK, fiz mais pesquisas e devo ser capaz de conectar-me facilmente a qualquer SSH_AGENT que esteja disponível quando o terminal estiver conectado. O tmux já fornece a configuração de chave "ambiente de atualização", mas a peça que falta é que os shells existentes não são atualizados magicamente. No entanto, o tmux rastreia as variáveis de ambiente atualizadas, portanto o script de atualização é muito menos hackeado do que as telas:
# 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}
}
A partir dissocomprometer-se
Responder2
Tive que modificar o @stsquadresponder. Estava falhando para mim porque o export
comando não conseguiu definir a SSH_CONNECTION
variável.
Eu tive que colocar o valor SSH_CONNECTION
entre aspas.
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}"
}
Responder3
Outra opção que encontrei recentemente é a de Daniel Robbinschaveiroutilitário que oferece uma maneira elegante de reconectar e ter um agente para todo o usuário/host em vez de apenas um agente para toda a sessão.