tmux:无法从 tmux 内部进行 SSH,即使我在 [重复] 上启用了代理转发 (ssh -A)

tmux:无法从 tmux 内部进行 SSH,即使我在 [重复] 上启用了代理转发 (ssh -A)

因此,我在 MacBook 上本地存储了一些服务器的密钥,但我在虚拟机内部工作了相当长一段时间,因此我使用 SSH 连接到虚拟机ssh -A。这允许我从虚拟机内部通过 SSH 连接到服务器。

我最近开始使用 tmux 来更好地管理我的终端窗口,但我发现了一个奇怪的问题。虽然我在 tmux 中打开的初始窗口可以使用 SSH,但任何其他打开的窗口都不能使用 SSH。 ssh-add显示从这个 tmux 窗口内部无法打开到我的 SSH 代理的连接。有什么想法可以让 tmux 与 SSH 代理转发很好地配合使用吗?

答案1

当您打开与 VM 的第二个连接时,它将使用不同的SSH_AUTH_SOCK环境变量,但 tmux 及其下的进程只会知道旧值。

当你连接到现有会话时,tmux 可以告诉主进程更新一些环境变量。SSH_AUTH_SOCK已经在列表中,但你可以通过以下方式添加自定义变量~/.tmux.conf

set -ga update-environment " FOO BAR"

但这只会影响新的通过 打开的 tmux 窗口prefix c。tmux 无法更新已在运行的进程(shell 等)的环境。


使用 OpenSSH,您可以重复使用相同的SSH 连接进行多个会话,保留SSH_AUTH_SOCK

  1. 启动主连接:

    ssh -AfNMS ~/.ssh/myvmhostname.socket myvmhostname
    
  2. 打开一个会话:

    ssh -S ~/.ssh/myvmhostname.socket myvmhostname
    

-M(有关和的自动化-S,请参阅手册页中的ControlMaster/ 。)ControlPathssh_config

答案2

嗨,我知道这是一个老问题,但是我发现这个基本上就是将这个添加到虚拟机上的 .bashrc 文件中。基本上,它将您的 ssh 套接字链接到可预测的目标。老实说,这可能是一个安全问题,但如果您是机器管理员,我认为它不应该是一个大问题(但我不是安全专家):

(摘自marks博客)

在您的 .bashrc 或 .zshrc 文件中,添加以下内容:

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

相关内容