我可以通过断开连接的 Screen 会话重新附加 SSH 密钥转发吗?

Dav*_*osh 8 ssh gnu-screen

可能的重复:
堡垒主机上的屏幕或 tmux 的 ssh-agent 密钥超时

我有一台笔记本电脑,上面运行着选美(PuTTy SSH 密钥代理)。如果我通过 ssh 连接到系统并启动屏幕,则 ssh 密钥转发工作正常。

但是,如果我与该屏幕会话断开连接,请注销,然后重新连接——密钥转发不再起作用。我假设这是因为当我重新连接时,密钥转发设置在新 ssh 会话的不同端口上,而不是旧的。

有没有办法教单个屏幕窗口重新连接到代理转发,以便我可以使用我的密钥再次转发?

Arc*_*ege 6

我的解决方案更健壮一些。将其放在远程端的 .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
Run Code Online (Sandbox Code Playgroud)

然后我使用reattach而不是screen. 这可以使用command screen -A ${1:+"$@"}和“屏幕”而不是“重新连接”来完成。

在@David Mackintosh 的回答中使用“别名”解决方案的问题在于,在屏幕中运行的进程现在在远程端具有相同的 SSH_AUTH_SOCK 值。想想下面的场景。

  • 本地:启动 SSH 代理获取SSH_AUTH_SOCK
  • 本地:SSH 到远程,SSH_AUTH_SOCK在远程设置新值
  • 远程:启动screentmux使用 SSH_AUTH_SOCK
  • 远程:创建shell,它继承了SSH_AUTH_SOCK screen
  • 远程:从屏幕上分离并注销
  • 本地:SSH 到远程,在远程设置 SSH_AUTH_SOCK
  • 远程:重新附加到屏幕会话,它仍然具有 SSH_AUTH_SOCK

诀窍是让在屏幕内运行的进程使用新值。您可以通过在SSH_AUTH_SOCK每次调用时将符号链接重新指向当前screen(对于新会话或重新附加会话)来实现。