当我重新连接断开连接的tmux会话时,我试图找到一种恢复SSH代理的好方法.
原因似乎是SSH代理会话发生了变化,但tmux会话中的环境变量未更新.
在附加会话本身之前,如何自动执行此操作?因为我附加的会话并不总是有bash提示符,所以我无法在其中键入内容.它必须是在创建或附加tmux会话之前运行的东西.
我正在运行的代码示例位于https://gist.github.com/ssbarnea/8646491 - 一个使用tmux创建persistem ssh连接的小ssh包装器.这很有效,但有时ssh代理停止工作,所以我不再能够使用它连接到其他主机.
pym*_*kin 75
Martijn Vermaat 有一个很好的要点,它可以深入解决您的问题,虽然它是针对屏幕用户的,所以我在这里调整它的tmux.
总结一下:
~/.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
Run Code Online (Sandbox Code Playgroud)让它在tmux中工作,将其添加到您的~/.tmux.conf
:
# fix ssh agent when tmux is detached
setenv -g SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Run Code Online (Sandbox Code Playgroud)如果要启用X11转发,则需要额外的工作,请参阅要点.
Han*_*zel 33
虽然默认情况下tmux
更新 SSH
变量,但没有必要
SSH_AUTH_SOCKET
变量我喜欢Chris Down的解决方案,我改为添加功能
fixssh() {
eval $(tmux show-env \
|sed -n 's/^\(SSH_[^=]*\)=\(.*\)/export \1="\2"/p')
}
Run Code Online (Sandbox Code Playgroud)
进入~/.bashrc
.呼叫fixssh
连接会话之后或之前ssh
/ scp
/ rsync
.
较新版本的tmux
支持-s
选项show-env
,仅限于此
eval $(tmux show-env -s |grep '^SSH_')
Run Code Online (Sandbox Code Playgroud)
是可能的.
use*_*062 20
这是我用于SSH_AUTH_SOCK
在tmux
窗口内更新的内容(基于Hans Ginzel的脚本):
alias fixssh='eval $(tmux showenv -s SSH_AUTH_SOCK)'
Run Code Online (Sandbox Code Playgroud)
或者为此tmux
没有showenv -s
:
alias fixssh='export $(tmux showenv SSH_AUTH_SOCK)'
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案,其中包括两种方法,当我重新连接到tmux会话时不需要额外的输入
alias ssh='[ -n "$TMUX" ] && eval $(tmux showenv -s SSH_AUTH_SOCK); /usr/bin/ssh'
Run Code Online (Sandbox Code Playgroud)
这里有很多很好的答案。但也有tmux show-environment
看不到的情况SSH_AUTH_SOCK
。在这种情况下,您可以使用find
来明确定位它。
export SSH_AUTH_SOCK=$(find /tmp -path '*/ssh-*' -name 'agent*' -uid $(id -u) 2>/dev/null | tail -n1)
Run Code Online (Sandbox Code Playgroud)
这又长又复杂,所以我会分解它......
01 export SSH_AUTH_SOCK=$(
02 find /tmp \
03 -path '*/ssh-*'
04 -name 'agent*'
05 -uid $(id -u)
06 2>/dev/null
07 | tail -n1
08 )
Run Code Online (Sandbox Code Playgroud)
export
SSH_AUTH_SOCK
设置为$()
命令替换输出的环境变量find
文件开始于 /tmp
/ssh-
在路径中的结果agent
如果您知道只有 1 个结果并且您不关心 stderr 垃圾,那么您可以省略 6 和 7。
归档时间: |
|
查看次数: |
22411 次 |
最近记录: |