我该如何设置公钥认证?

63

如何设置 SSH 的公钥认证?

2个回答

108

如果您已安装SSH,则应该能够运行..

ssh-keygen

按照以下步骤进行操作,你将得到两个文件:id_rsaid_rsa.pub(第一个是私钥,第二个是公钥 - 你需要复制到远程主机上)

然后,连接到你想要登录的远程机器,在文件~/.ssh/authorized_keys中添加你的id_rsa.pub文件的内容。

还有一点,使用chmod 600命令将所有的id_rsa*文件设为只有自己可以读取(包括本地和远程),这样其他用户就无法读取它们:

chmod 600 ~/.ssh/id_rsa*

同样地,请确保远程的~/.ssh/authorized_keys文件也是chmod 600

chmod 600 ~/.ssh/authorized_keys

接下来,当您执行 ssh remote.machine 命令时,它应该会要求您输入密钥的密码,而不是远程计算机的密码。


为了更方便地使用,您可以使用 ssh-agent 来在内存中保存解密后的密钥 - 这意味着您不必每次都输入密钥对的密码。要启动代理,您可以运行以下命令(包括反引号引起来的部分,这将评估 ssh-agent 命令的输出):

`ssh-agent`

在某些发行版上,ssh-agent会自动启动。如果你运行echo $SSH_AUTH_SOCK并显示一个路径(可能在/tmp/目录下),则它已经设置好,因此您可以跳过之前的命令。

然后,要添加密钥,您需要执行

ssh-add ~/.ssh/id_rsa

输入您的口令,它将被存储直到您将其删除(使用ssh-add -D命令可以从代理中删除所有密钥)。


4
如果你需要创建 .ssh 文件夹,请不要像我一样将其设置为 600,否则你可能会遇到麻烦。相反,将其设置为 700。 :-) - Ray Hulha
我能否使用为已知/配置的客户端生成的私钥从未知机器登录以与服务器通信?我的意思是,这个私钥是否可移植并且可以在紧急情况下用于从其他机器验证自己到服务器? - Rajat Gupta
2
@user01 是的,您可以将私钥复制到多个系统中,并访问具有相应公钥的另一台服务器。 - Charlie Gorichanaz
@Charlie Gorichanaz:反过来也可以吗?比如我在服务器上生成密钥对,然后将生成的公钥用于连接到该服务器的所有其他机器上? - Rajat Gupta
2
将公钥上传到远程机器也可以通过在本地机器上执行 ssh-copy-id [-i identity] [user@]host 来处理。 - Jan Blechta
@user01 如果您在服务器上生成密钥对并将公钥复制到其他机器上,则只能从服务器登录到那些机器,而不能反过来。 - törzsmókus

5

对于Windows系统,这篇文章是一个很好的介绍和指南。

以下是一些适用于非Linux系统的好的ssh-agent程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接