我为我的 github 帐户设置了一个私钥,我相信它的密码存储在 OS X 的钥匙串中。当我打开终端窗口并输入ssh git@github.com
.
但是,当我在 ssh 会话上或本地在 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"
Run Code Online (Sandbox Code Playgroud)
而通过 ssh 或 tmux 我得到:
[~]
$ echo $SSH_AUTH_SOCK
[~]
$ ssh-add -l
Could not open a connection to your authentication agent. …
Run Code Online (Sandbox Code Playgroud) 是否可以使用 .ssh/config 中的 IdentityFile 指令指定转发的密钥?
我在我们的生产服务器上尝试通过 Capistrano/GIT 部署一些代码时遇到了这个怪癖。我的个人和我的工作 GIT 密钥总是加载在我的 SSH 代理中,而且碰巧我的个人密钥首先添加到代理中。我在使用 Capistrano 部署时使用代理转发,因此当主机尝试对 `git pull` 操作进行身份验证时,它失败并出现以下错误:
错误:对“您的用户”的“某些回购”的权限被拒绝。
因为它在尝试适当的密钥(稍后在 ssh 代理中提供)之前尝试使用我的个人 git 密钥进行身份验证,并假设我正在访问一个我无权访问的外部存储库。我可以让我的个人用户访问每个工作仓库,但在我的本地机器上,我可以通过在 .ssh/config 中定义自定义域来解决这个问题,如下所示:
主机个人.github.com主机
名github.com
用户git
IdentityFile ~/.ssh/some_key
主机work.github.com
主机名github.com
用户git
IdentityFile ~/.ssh/some_other_key
这样 git 永远不会混淆。是否可以为我的生产设备上的转发密钥创建 .ssh/config 规则,以便他们在拉入新代码时始终知道使用哪个密钥?基本上我希望能够做到:
主机work.github.com
主机名github.com
用户git
IdentityFile some_forwarded_key
谢谢!
不久前,我注意到我的 ssh-agent 中有三个我无法删除的键。 ssh-add -l
显示三个键;我跑了ssh-add -D
,然后被告知“所有身份都已删除。”;但随后立即ssh-add -l
显示了相同的三个键。
如果我注销然后重新登录,密钥仍然存在。如果我重新启动机器,密钥仍然存在。如果我删除 中的密钥环目录/tmp
,我将无法再连接ssh-agent
,但是在注销并重新登录后,密钥又回来了。他们是无懈可击的。
据我所知,钥匙是我的,不是别人的。我可以通过他们访问我通常的本地服务。但是,当我再次添加其中一个密钥时ssh-add
,给出私钥文件的路径,新密钥在以下输出中具有不同的外观ssh-add -l
:
2048 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f /home/jruser/.ssh/jruser-keyname-20110418 (RSA)
Run Code Online (Sandbox Code Playgroud)
对比原版:
2048 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f jruser 04/18/2011 keyname (RSA)
Run Code Online (Sandbox Code Playgroud)
有没有办法合理地解释这种行为?我想真的有两个问题:
即使在重新启动后,如何设法保留密钥?我的基本知识ssh
表明密钥总是必须手动添加。
为什么ssh-agent -D
要在删除身份时对我撒谎?
如果有的话,SSH 密钥与用于其他目的(例如电子邮件签名)的非对称密钥有何不同?
我被提示问这个,部分是因为在 OS X 上,有可用于管理 SSH 密钥的应用程序(ssh-agent、SSHKeychain 等)以及旨在管理 GPG 密钥的应用程序(GPG Keychain Access 等),显然,两人从未见面。但是,我不认为这是 OS X 特定的问题。
这种关注点分离是因为密钥的种类完全不同,还是因为它们存储在不同的地方,还是出于其他原因或原因的组合,例如历史原因?
沿着如何告诉 git 使用哪个私钥? 我想在特定情况下使用特定的 ssh 密钥。
我的问题是,即使我指定了“-i something”,ssh 也会按照添加顺序使用来自我的 ssh-agent 的密钥。
我的具体情况:
Host USER1.git
Hostname github.com
User git
IdentityFile ~/.ssh/USER1.id_rsa
Run Code Online (Sandbox Code Playgroud)
ssh -vt USER1.git
USER2.id_rsa
如果这是首先添加到 ssh-agent 的密钥,则仍将使用。
我运行了一些 X 应用程序ssh -Y my_address
,现在每次使用它时它都会要求我解锁我的 RSA 密钥。我以前每天只需要解锁一次。这是怎么回事?
我正在使用 Ubuntu 9.04。
id_rsa
在其默认位置创建具有名称的密钥后。我正在使用命令向 SSH 代理添加身份ssh-add ~/.ssh/id_rsa
,添加成功。
我可以在不输入密钥密码的情况下进行 SSH,因为它已经与 SSH 代理一起使用了。
但是,当我重新启动机器或服务器,然后使用命令检查身份时,ssh-add -L
我收到类似The agent has no identities
.
这是否意味着当我们重新启动机器时,Agent 丢失了身份?这是正常行为还是我在这里缺少的东西?
请指导我,我对SSH不太熟悉。
我正在尝试按照 OSX 此处的说明进行操作
http://wiki.filezilla-project.org/Howto
我可以ssh
在没有用户名/密码的情况下成功到达目标服务器(OSX 从~/.ssh
目录中获取我的证书),但我不知道如何让 Filezilla 做同样的事情。
我试过只是跑步ssh-agent
,但没有太大作用。
我有一个运行一些任务的 cronjob,在它运行的脚本的开头是一个 ssh-add 调用(它不以具有适当密钥的用户身份运行,因此它需要添加,将来它很可能使用部署版本控制中定义的密钥)。这看起来像这样:
ssh-agent bash -c "ssh-add /home/tomjn/.ssh/id_rsa; etc... "
Run Code Online (Sandbox Code Playgroud)
我想让它静音,因为这个 cronjob 定期运行,而且我的收件箱中有很多电子邮件对我来说完全没有用,说明是的,添加了密钥。我只想要出现问题时的电子邮件,例如 git pull 远程连接挂断等,这确实会发生。
所以 TLDR,我一直看到这个:
添加的身份:/home/tomjn/.ssh/id_rsa (/home/tomjn/.ssh/id_rsa)
我怎么闭嘴?
我试过这样的事情:
ssh-add /home/tomjn/.ssh/id_rsa > /dev/null
Run Code Online (Sandbox Code Playgroud)
但无济于事。手册页没有表明有一个--quiet
参数,我还能做些什么来使输出静音?
我已经检查了很多关于这个的教程,但没有弄清楚。
根据 tuts,有两种方式可以配置代理转发
在您的配置文件~/.ssh/config
集中
Host example.com
ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)通过添加身份,例如ssh-add
.
它有什么用
SSH 代理转发用于存储密钥密码。这样我们就不需要每次都输入密码?
我们是否需要两台服务器来测试 SSH 代理转发?请建议。或者我们也可以使用单个服务器进行测试?
我已经检查了这个git hub 链接并遵循了相同的步骤。我可以看到代理。运行此命令时echo "$SSH_AUTH_SOCK"
是否意味着它正在工作?
我怎样才能用我的服务器做到这一点?请指导我。
更新: 当我尝试 ssh 时,我在终端中收到此错误消息
代理承认未能使用密钥签名。