所以我在我的 MacBook 上本地存储了一些服务器的密钥,但是我在虚拟机中工作了相当长的时间,所以我使用 .SSH 连接到虚拟机ssh -A
。这允许我从 VM 内部通过 SSH 连接到服务器。
我最近开始使用 tmux 来更好地管理我的终端窗口,但我发现了一个奇怪的问题。虽然我在 tmux 中打开的初始窗口可以使用 SSH,但任何其他打开的窗口都不能。 ssh-add
显示从这个 tmux 窗口内部无法打开到我的 SSH 代理的连接。任何想法如何使 tmux 与 SSH 代理转发很好地发挥作用?
当您打开与 VM 的第二个连接时,它将使用不同的SSH_AUTH_SOCK
环境变量,但 tmux 及其下的进程只会知道旧值。
当您附加到现有会话时,tmux 可以告诉主进程更新一些环境变量。SSH_AUTH_SOCK
已在列表中,但您可以通过~/.tmux.conf
以下方式添加自定义:
set -ga update-environment " FOO BAR"
Run Code Online (Sandbox Code Playgroud)
但是,这只会影响.tmux 打开的新tmux 窗口prefix c。tmux 不可能更新已经运行的进程(shell 等)的环境。
使用 OpenSSH,您可以为多个会话重复使用相同的SSH 连接,同时保留SSH_AUTH_SOCK
.
启动主连接:
ssh -AfNMS ~/.ssh/myvmhostname.socket myvmhostname
Run Code Online (Sandbox Code Playgroud)在它上面打开一个会话:
ssh -S ~/.ssh/myvmhostname.socket myvmhostname
Run Code Online (Sandbox Code Playgroud)(有关的自动化-M
和-S
,指ControlMaster
/ControlPath
在ssh_config
手册页。)