如何在连接到现有的tmux会话时自动更新SSH代理环境variables
我试图find一个很好的方式来恢复SSH代理,当我重新连接断开tmux会话。
原因似乎是SSH代理会话更改,但tmux会话中的环境variables未更新。
如何在附加会话之前自动执行此操作? 因为我附加的会话并不总是有bash提示符,所以我不能在其中input内容。 在创build或附加tmux会话之前,它必须先运行。
我正在运行的代码示例是https://gist.github.com/ssbarnea/8646491 – 一个使用tmux创buildpersistem ssh连接的小型ssh包装器。 这工作得很好,但有时ssh代理停止工作,所以我不能再使用它连接到其他主机。
Martijn Vermaat提供了一个很好的要点 ,尽pipe它是针对屏幕用户的,但是我们正在调整它在tmux中的地位。
总结:
-
如果它还不存在,创build
~/.ssh/rc
,并添加以下内容:#!/bin/bash # Fix SSH auth socket location so agent forwarding works with tmux if test "$SSH_AUTH_SOCK" ; then ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock fi
-
让它在tmux中工作,把它添加到你的
~/.tmux.conf
:# fix ssh agent when tmux is detached setenv -g SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
需要额外的工作,如果你想启用X11转发,请参阅要点 。
当tmux
默认更新 SSH
variables时,不需要
- 更改/添加套接字path
- 更改
SSH_AUTH_SOCKET
variables
我喜欢Chris Down的解决scheme,我改变了添加function
fixssh() { eval $(tmux show-env \ |sed -n 's/^\(SSH_[^=]*\)=\(.*\)/export \1="\2"/p') }
进入~/.bashrc
。 在连接会话之后或在ssh
/ scp
/ rsync
之前调用fixssh
。
show-env
更新版本的tmux
支持-s
选项,仅限show-env
eval $(tmux show-env -s |grep '^SSH_')
是可能的。
以下是我用于更新tmux
窗口中的SSH_AUTH_SOCK
内容(基于Hans Ginzel的脚本):
alias fixssh='eval $(tmux showenv -s SSH_AUTH_SOCK)'
或者对于没有showenv -s
tmux
:
alias fixssh='export $(tmux showenv SSH_AUTH_SOCK)'
这是我的解决scheme,包括两种方法,并且当我重新连接到tmux会话时不需要额外的input
alias ssh='[ -n "$TMUX" ] && eval $(tmux showenv -s SSH_AUTH_SOCK); /usr/bin/ssh'