我为我的 github 帐户设置了一个私钥,我相信它的密码存储在 OS X 的钥匙串中。当我打开终端窗口并输入 时,我当然不必输入它。ssh [email protected]
但是,当我在 ssh 会话中运行 bash,或者在 tmux 会话中本地运行 bash 时,每次尝试 ssh 到 github 时我都必须输入密码。
这个问题这表明 screen 也存在类似的问题,但我对这个问题的理解还不够深入,无法在 tmux 中修复它。还有这一页其中包括一个相当复杂的解决方案,但适用于 zsh。
编辑:
回应@Mikel 的回答,从本地终端我得到以下输出:
[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~]
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"
而通过 ssh 或 tmux 我得到:
[~]
$ echo $SSH_AUTH_SOCK
[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found
echo $SSH_AGENT_PID
无论我从哪个shell运行它,它都不会返回任何内容。
答案1
我的同事创建了一些 bash 函数来帮助寻找现场代理:https://github.com/wwalker/ssh-find-agent
他主要用它进行系统之间的连接(笔记本电脑到台式机等),但我最常用它来进行本地 tmux 会话,即从窗口管理器(我自己是 OS X)注销/登录。
用法
下载 ssh-find-agent.bash(
git clone git://github.com/wwalker/ssh-find-agent.git
有效)。将以下内容添加到〜/.bashrc:
. /path/to/ssh-find-agent.bash
然后您可以键入以下命令在当前 shell 中设置 SSH_AUTH_SOCK:
set_ssh_agent_socket
答案2
一个优雅的解决方案,被采纳来自 dagit.o:
创造~/.ssh/rc
#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
添加~/.tmux.conf
set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock
答案3
在您的.tmux.conf
配置文件中,添加以下行:
设置-g更新环境“SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION”
这会导致这些环境变量从主 shell 复制到 tmux 中打开的任何 shell,然后允许 ssh-agent 在这些 tmux shell 中正常工作。
答案4
不确定你使用的是 bash 还是其他 shell,但是这个家伙的 tmux 设置看起来它适用于 bash。我个人使用 zsh哦我的天啊,我发现在添加后,ssh-agent 开始在 tmux 中工作
zstyle :omz:plugins:ssh-agent agent-forwarding on
添加到我的 .zshrc 文件中,并在正在运行的 zsh 会话中重新加载配置。我还发现这个家伙的面向 zsh 的解决方案,但结果对我来说没有必要。