我怎样才能让 ssh-agent 通过 ssh 和 tmux (在 OS X 上)工作?

我怎样才能让 ssh-agent 通过 ssh 和 tmux (在 OS X 上)工作?

我为我的 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)注销/登录。

用法

  1. 下载 ssh-find-agent.bash(git clone git://github.com/wwalker/ssh-find-agent.git有效)。

  2. 将以下内容添加到〜/.bashrc:

    . /path/to/ssh-find-agent.bash
    
  3. 然后您可以键入以下命令在当前 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 的解决方案,但结果对我来说没有必要。

相关内容