因此,我在 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
。
启动主连接:
ssh -AfNMS ~/.ssh/myvmhostname.socket myvmhostname
打开一个会话:
ssh -S ~/.ssh/myvmhostname.socket myvmhostname
-M
(有关和的自动化-S
,请参阅手册页中的ControlMaster
/ 。)ControlPath
ssh_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