tmux:无法从 tmux 内部 SSH,即使我打开了代理转发 (ssh -A)

d11*_*wtq 5 ssh-agent tmux

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

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

use*_*686 7

当您打开与 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.

  1. 启动主连接:

    ssh -AfNMS ~/.ssh/myvmhostname.socket myvmhostname
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在它上面打开一个会话:

    ssh -S ~/.ssh/myvmhostname.socket myvmhostname
    
    Run Code Online (Sandbox Code Playgroud)

(有关的自动化-M-S,指ControlMaster/ControlPathssh_config手册页。)