我可能已经解决了一个完全封装在~/.tmux.conf
配置文件中的解决方案。与修改~/.bash_profile
和相比,这是一种不同的方法~/.ssh/rc
。
解决方案仅使用 ~/.tmux.conf
只需将以下代码剪切并粘贴到您的 ~/.tmux.conf
if-shell '[ -n $SSH_AUTH_SOCK ]' " \
set-option -sg update-environment \"DISPLAY WINDOWID XAUTHORITY\"; \
setenv -g SSH_AUTH_SOCK /tmp/ssh_auth_sock_tmux; \
run-shell \"ln -sf $(find /tmp/ssh-* -type s -readable | head -n 1) /tmp/ssh_auth_sock_tmux\" \
"
警告
当启动与同一台机器的多个连接时,上述解决方案以及其他解决方案很容易出现竞争。考虑一下:
- 客户端1连接:SSH到machineX,启动/附加tmux(写入
ssh_auth_sock
链接)
- 客户端2连接:SSH到machineX,启动/附加tmux(覆盖
ssh_auth_sock
链接)
- 客户端2断开连接:客户端1保持旧
ssh_auth_sock
连接,因此断开ssh-agent
但是,该解决方案更具弹性,因为它仅ssh_auth_sock
在tmux启动/附加时覆盖链接,而不是在bash shell~/.bash_profile
或ssh连接初始化时覆盖链接~/.ssh/rc
为了覆盖最后的竞争条件,可以添加一个按键绑定,以使用(Ctrl-b r)
按键序列重新加载tmux配置。
bind r source-file ~/.tmux.conf
在活动tmux会话中,当ssh_auth_sock
链接失效时执行此序列将刷新ssh-agent连接。