2

$ ssh localhost,我被要求提供密码。为每次登录提供密码既乏味又烦人。

所以,我用密码创建了 ssh 密钥。

$ ssh-keygen -t rsa

我已将 to 的内容复制~/.ssh/id_rsa.pub~/.ssh/authorized_keys

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

现在,$ ssh localhost我被要求提供密码。没有改进,但我没有提供密码,而是提供了密码

我遇到了将公钥添加到 ~/.ssh/authorized_keys 不会让我自动登录,但它并没有解决我的问题。正如评论所述,如果密钥是使用密码创建的,它将始终要求输入密码。

但是,如果ssh 密钥是在没有 passphrasessh的情况下创建的,则任何操作都不需要密码。

这篇文章的关键是冗长的标志-v

debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

在搜索时,PEM_read_PrivateKey failed我遇到了很多帖子,其中一些来自 stackoverflow 本身。

但找不到合适的解决方案。

然后我遇到了设置无密码、无密码的 ssh,它说明了使用 ssh 代理自动输入密码。

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

或者

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

但同样,它只解决了那个特定的会话。每次我开始一个新会话时,我都必须执行

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

我可以将它添加到我的 .bashrc 或 .zshrc 中,但是为每个会话输入密码很烦人。

有没有办法在会话中使用相同的 ssh-agent?

4

1 回答 1

2

为了解决跨会话ssh-agent,必须理解

$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

在执行时ssh-agent,它会输出一些unix 命令STDOUT

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3299; export SSH_AGENT_PID;
echo Agent pid 3299;

评估eval-ing acommand将执行命令的输出

所以,eval`ssh-agent`会翻译成

$ SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK; SSH_AGENT_PID=3299; export SSH_AGENT_PID; echo Agent pid 3299;

上述语句设置环境变量SSH_AUTH_SOCKSSH_AGENT_PID并将代理的进程 ID打印到STDOUT

环境变量SSH_AUTH_SOCK 指向一个 UNIX 套接字

$ file $SSH_AUTH_SOCK
/tmp/ssh-qtCEoF3298/agent.3298: socket 

对于任何其他ssh操作,它会查找此套接字,如果存在则使用它或询问密码。但是这个套接字需要经过身份验证才能使用。这是通过添加身份来完成的

$ ssh-add ~/.ssh/id_rsa

由于环境变量 SSH_AUTH_SOCK 已导出,因此它可用于源自此 shell 的任何 shell,但不适用于任何新的 login

然后我遇到了理解 ssh-agent 和 ssh-add引导到ssh-find-agent.bash

ssh-find-agent.bash查找所有活动代理套接字并将它们导出为环境变量。

正如Jon Cairns在帖子中所建议的那样。

将它下载到可访问的地方(例如 ~/.ssh-find-agent)并将以下内容添加到您的 shell 的配置文件中(例如 ~/.bashrc、~/.zshrc):***

source ~/.ssh-find-agent/ssh-find-agent.bash

set_ssh_agent_socket

这就是我一直在寻找的解决方案

我已经修改了函数名称,以适应我的喜好,同样可以在ssh-auth-sockGPG找到与, GNOME& 相关的函数OSX不是我的目的所必需的。脚本需要重构。

而且,OS X有自己的钥匙扣。 因此我只为Linux

我还为 eval ssh-agent&& ssh-add ~/.ssh/id_rsa创建了一个别名,这比输入整个命令更快。

于 2014-08-06T05:55:58.583 回答