我正在运行 Mac OS X,似乎在通过 SSH 连接到多台机器后,使用身份文件,我的“ssh-agent”建立了很多身份/密钥,然后有时向远程机器提供太多,导致他们在连接之前踢我:
从 10.12.10.16 收到断开连接:2:cwd 的身份验证失败太多
很明显发生了什么,这个页面更详细地讨论了它:
SSH 服务器只允许您尝试进行一定次数的身份验证。每个失败的密码尝试、每个失败的公钥/身份提供等,都会占用这些尝试之一。如果您的代理中有很多 SSH 密钥,您可能会发现 SSH 服务器可能会在允许您尝试密码身份验证之前将您踢出去。如果是这种情况,有几种不同的解决方法。
重新启动会清除代理,然后一切正常。我还可以将此行添加到我的.ssh/config
文件中以强制它使用密码身份验证:
PreferredAuthentications keyboard-interactive,password
Run Code Online (Sandbox Code Playgroud)
无论如何,我在我引用的页面上看到了关于从代理中删除密钥的说明,但我不确定这是否适用于 Mac,因为它们似乎在重新启动后被清除。
是否有一种简单的方法可以清除“ssh-agent”中的所有密钥(与重新启动时发生的情况相同)?
有没有一种方便的方法来确保来自给定用户(即我)的所有登录都使用相同的 ssh-agent?我在大部分时间编写了一个脚本来完成这项工作,但我一直怀疑有某种方法可以做到这一点,而我刚刚错过了。此外,从那时起,计算技术取得了惊人的进步,例如这个网站。
所以这里的目标是
ssh-agent
运行,则启动一个,导出并ssh-add
调用环境变量。当有问题的盒子用作ssh
进入第三个盒子时的中继点时,此功能特别有价值。在这种情况下,它避免了每次 ssh 时都必须输入私钥的密码,然后再想,例如,git push
做某事。
下面给出的脚本在很大程度上可靠地完成了这项工作,尽管它最近在 X 崩溃时出现了问题,然后我开始了另一个图形会话。在这种情况下,可能还有其他的扭曲。
这是我的坏就是好脚本。我从我的.bashrc
.
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; …
Run Code Online (Sandbox Code Playgroud) 我想运行 ssh-agent(具有最大生命周期选项),但不在启动时添加任何密钥,而是按需添加它们。
就像我第一次登录某个服务器时,它应该要求输入密码,下次(除非我等了一个多小时)它应该连接干净:
ssh server1
Enter passphrase for key '/home/vi/.ssh/id_dsa':
server1> ...
ssh server2
server2> # no passphrase this time
# wait for lifetime
ssh server2
Enter passphrase for key '/home/vi/.ssh/id_dsa':
Run Code Online (Sandbox Code Playgroud)
我不想手动记住每次运行“ssh-add”。(例如,只为 ssh 输入密码和“哦,它没有记住,需要重新输入”)。
如果用户提供了密码,如何配置 ssh 以自动将密钥添加到 ssh-agent?
如果您在 ssh-agent 运行时启动屏幕会话(从 ssh -A 代理转发),则访问 ssh-agent 工作正常。但是,如果您与该会话分离、注销、再次登录(使用 ssh-agent 转发),然后重新连接到您的屏幕会话,则 ssh-agent 访问将不起作用。
如何解决这个问题?
我可以使用 ssh 配置文件启用转发添加到 ssh-agent 的 ssh 密钥。我怎样才能对 gpg 密钥做同样的事情?
我最近进行了设置,openssh
所以我可以将它与git
.
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>
Run Code Online (Sandbox Code Playgroud)
一段时间后,在我注销并重新登录后,我尝试使用时git push
出现错误。此错误的解决方案是再次运行相同的命令。
ssh-agent
运行,这样我就不必开始新的了澄清一下,我使用 zsh,因此某些 bash 功能在我的 .zshrc 中不起作用。
出于某种原因,我的一个 ssh 密钥“刚刚坏了”——它刚刚停止工作:
$ ssh-add ./id_rsa
Error loading key "./id_rsa": invalid format
Run Code Online (Sandbox Code Playgroud)
将密钥复制到干净的 VM 中,密钥确实有效。即使使用完全相同的 ssh 版本(Fedora 28 上的 OpenSSH_7.8p1、OpenSSL 1.1.0i-fips 2018 年 8 月 14 日)。所以它必须与我假设的系统上的一些配置有关。
# cat ./id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,...
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
同样奇特的是:GNOME 以某种方式设法在使用 seahorse 登录时添加密钥。然后ssh-add -L
确实列出了密钥但它不可用:
sign_and_send_pubkey: signing failed: agent refused operation
Run Code Online (Sandbox Code Playgroud) 我每天都使用 Mac OS X Lion 并通过 SSH 登录远程主机。尽管我使用 SSH 密钥对进行远程身份验证并且我不需要机动化每个主机的登录短语,但终端要求输入密码来访问我的 SSH 私钥仍然很烦人。
出于安全原因,我认为必须需要一个用于访问 SSH 私钥的密码。有没有办法让终端在启动时只询问一次短语,然后记住它,并在以后的 SSH 会话中自动使用我的私钥?
有一个名为的脚本keychain
在 Gentoo Linux 上运行良好。但我从来没有在 Mac OS X Lion 上弄明白。更重要的是,有很多令人生畏的术语,例如ssh-agent
,ssh-add
。在阅读了有关这些 SSH 工具包的各种材料并做了一些令人沮丧的实验后,我更加困惑了。
因此,我来到了StackExchange,就以下问题寻求一些建议。
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
以及他们如何互相交流?Keychain Access.app
?它不像以前那样存储 SSH 短语。我在这里列出我所做的。希望有关于我错过的步骤的线索。
步骤 1. 在我的 Mac 上创建一个 SSH 密钥对。
$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.
Run Code Online (Sandbox Code Playgroud)
步骤 …
本指南很好地解释了 ssh-agent 如何跨多个系统工作。我想按照最后一组图表中的方式设置转发,但我无法跟踪执行此操作所需的步骤。
对于我网络上的某些机器,我可以从 A 到 B,然后从 B 到 C,而无需输入证书密码。然而,其他机器给出“无法打开与您的身份验证代理的连接”(有时!),然后不会转发我的身份验证信息。从其中一台机器通过 SSH 连接到网络上的另一台机器再次提示我输入我的私钥密码。
这些机器不是我制造的,但我可以管理其中的一些。我不确定 boxen 有效和无效的 boxen 之间有什么区别——可能是防火墙问题、ssh/ssh-agent/sshd 配置等等,我看不到任何步骤——特定于转发漂浮在“网上”的分步指南。我只需要知道从哪里开始追查这个问题。
我输入ssh-agent
并返回以下内容:
SSH_AUTH_SOCK=/tmp/ssh-GqdeT074HLRJ/agent.4670; export SSH_AUTH_SOCK;
SSH_AGENT_ID=4671; export SSH_AGENT_PID;
echo Agent pid 4671;
Run Code Online (Sandbox Code Playgroud)
然后我输入ssh-add privkey.pem
并得到以下内容:
Could not open a connection to your authentication agent
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?我也尝试sudo
在每个命令之前添加,但输出几乎相同。