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

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

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

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

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

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

答案1

我的解决方案更强大一些。将其放入远程端的 .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 值。想想以下场景。

  • 本地:启动 SSH 代理获取SSH_AUTH_SOCK
  • 本地:SSH 到远程,SSH_AUTH_SOCK在远程设置新值
  • 远程:启动screentmux,使用 SSH_AUTH_SOCK
  • 远程:创建 shell,它继承自 SSH_AUTH_SOCKscreen
  • 远程:脱离屏幕并注销
  • 本地:SSH 到远程,设置新的 SSH_AUTH_SOCK遥控器上的值
  • 远程:重新连接到屏幕会话,仍然有老的 SSH_AUTH_SOCK价值

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

答案2

这实际上是以下内容的重复:堡垒主机上的 ssh-agent 密钥与屏幕或 tmux 超时

解决方案:

  • 添加到你的.bash_profile:

    回显“导出 SSH_AUTH_SOCK=$SSH_AUTH_SOCK”>~/.ssh/auth_sock

  • 添加到你的.bashrc:

    别名 ssh="源 ~/.ssh/auth_sock ; ssh"

到目前为止这对我而言似乎是有效的。

相关内容