为什么我输入了ssh-agent和ssh-add之后还需要输入密码?

Why do I still have to enter password after I entered ssh-agent and ssh-add?

我正在学习 Ansible,在设置文档中:http://docs.ansible.com/intro_getting_started.html

它说如果我不想每次都输入密码,我可以这样做:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

我搞定了,怎么每次还是要输入密码? 然后它说 "you may wish to use Ansible’s --private-key option",但我找不到关于它的任何文件。这是为什么以及如何做?

我不太了解 Ansible,但我对 ssh 密钥的工作原理略知一二

当您使用 ssh-keygen 命令(默认进入 ~/.ssh/id_rsa 文件)生成新的 SSH 密钥时,它会要求您输入密码(密码)
每当您使用该密钥时,它都会要求您提供该密码。

如果您使用

创建新密钥
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/YOUR_USERNAME/.ssh/id_rsa_nopass
Enter passphrase (empty for no passphrase): [just press enter, don't type anything]
Enter same passphrase again: [just press enter again]

这将在您选择的目录 (/home/user/.ssh)

然后您应该能够使用以下命令,假设 ansible 已设置为正确使用您的 ssh 密钥

$ ssh-add ~/.ssh/id_rsa_nopass

注意:使用没有密码的 ssh 密钥可能很危险,因为任何人都可以访问您的设备并在不知道您的密码的情况下进行连接。如果您不介意这一点,那么无密码 ssh 密钥是避免输入密码的好方法 everyone

编辑:刚刚稍微研究了一下 Ansible,它的基本设置只是 运行 ssh 服务器上的一个命令,对吗?
在这种情况下,您可能需要将 public 密钥添加到您要连接的任何服务器,这通常可以通过命令

完成
ssh-copy-id -i /path/to/your/public/key/file yourname@yourserver.com -p your_server's_ssh_port

例如,要将之前的 id_rsa_nopass 密钥授权给服务器 example.org 上的帐户 foobar,您可以使用 ssh 端口 10022

ssh-copy-id -i ~/.ssh/id_rsa_nopass.pub foobar@example.org -p 10022

这将提示您输入 foobar@example.org 的密码,填写密码后它将授权 public 密钥连接到该服务器,并且由于 id_rsa_nopass 已没有密码,您现在应该可以在没有任何密码提示的情况下连接