如何配置 SSH 免密码登录

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
fangyihang
帖子: 2
注册时间: 2017-05-05 19:00

如何配置 SSH 免密码登录

#1

帖子 fangyihang » 2017-05-05 19:36

SSH 是用于管理与服务器通信的加密协议。当你使用 Linux 服务器时,你的大部分时间有可能都花费在通过 SSH 连接到服务器的终端会话中。

尽管有许多不同的通过 SSH 登录服务器的方法,但在这篇文章中,我们将重点介绍 SSH 密钥方式。 SSH 密钥提供了一种简单,但极其安全的登录服务器的方法,这是我们向所有用户推荐的方法。

SSH 密钥如何工作?

SSH 服务器可以使用许多不同的方法来验证客户端。其中最基本的是密码认证,这易于使用,但不是最安全的。

尽管密码是以安全的方式发送到服务器,但是它们通常不够复杂或者不够长,难以抵抗重复的,持久的攻击者。尽管有其他方法可以给密码认证额外添加一些安全性(fail2ban 等),但是 SSH 密钥的方式已经是一个可靠和安全的替代方法。

SSH 密钥对是两个加密的安全密码,可用于给 SSH 服务器验证客户端,每个密钥对由公钥和私钥组成。

私钥由客户端保留,应该保持绝对隐私。私钥一旦泄漏,攻击者就可以直接登录到相关联的公钥配置的服务器,而不需要额外的认证。而作为一个额外的保护措施,私钥可以用密码再次加密。

相关的公钥可以自由共享,没有任何负面后果。公钥可以用于加密只有私钥可以解密的消息。可以根据这个特性进行认证。

公钥被上传到你希望能够使用 SSH 登录的远程服务器。该密钥将添加到你用于登录的用户帐户目录下 ~/.ssh/authorized_keys 文件中

当客户端尝试使用 SSH 密钥进行身份验证时,服务器可以测试客户端是否拥有私钥。如果客户端可以证明它拥有私钥,则生成一个终端会话或执行请求的命令。

基本流程如图所示:

SSH Key Authentication

图中表示的是笔记本电脑连接到服务器,但它也可以认为一个服务器连接到另一个服务器。

如何生成 SSH 密钥

要为服务器配置基于 SSH 密钥的身份验证,第一步是在本地计算机上生成 SSH 密钥对。

为此,我们可以使用 ssh-keygen 命令,它就包含在标准的 OpenSSH 工具套件中。默认情况下,它会创建一个 2048 位的 RSA 密钥对,大多数情况这就足够了。

在本地计算机上,通过输入以下命令生成 SSH 密钥对:

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
这是提示你输入密钥对要放置的位置。默认情况下,密钥会存储在 ~/.ssh 目录下,id_rsa 是私钥,公钥是 id_rsa.pub。

通常情况,使用默认位置即可,这样可以让 SSH 客户端在尝试进行身份验证时自动查找 SSH 密钥。如果不想使用默认路径,可以现在输入。

如果你先前已经生成过 SSH 密钥对,可能会看到类似如下的提示:

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?
如果你选择覆盖,你就无法使用之前的密钥进行身份验证。所以选择 “y” 时要非常小心,因为这是一个不可逆转的过程。

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
接下来,系统会提示你输入密钥的密码,这可用于加密硬盘上的私钥文件。

这时候你可能想知道如果你还是需要输入密码,那 SSH 密钥到底有什么优势。下面列出了一些:

SSH 私钥(可以密码保护的部分)永远不会暴露在网络上。密码仅用于解密本地机器上的密钥。这意味着无法针对私钥密码使用基于网络的暴力破解。

私钥保存在受限目录中,SSH 客户端不会识别未保存在受限目录中的私钥。密钥本身也必须具有受限权限(只能所有者读写),这表示系统上的其他用户无法窥探。

任何希望破解 SSH 私钥密码的攻击者都必须已经可以访问系统,这意味着他们已经可以访问您的用户帐户或 root 帐户。如果您处于这种状况下,密码可以防止攻击者立即登录到其他服务器,这样你就有时间创建和部署一个新的 SSH 密钥对,并移除受攻击的密钥的访问。

因为私钥永远不会暴露在网络中并且通过文件权限来保护,因此除了你(和 root 用户)之外的任何人都不能够访问此文件。私钥密码则在这些条件都被破坏的情况下作为额外的保护。

私钥密码是可选的,如果设置了,你就必须在每次使用此密钥时提供(除非您使用了存储解密密钥的 SSH 代理软件)。我们建议使用私钥密码,但如果您不想设置,只需按确认键跳过此提示。

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
您现在有了一个公钥和一个私钥,您可以使用它来进行身份验证。下一步则是将公钥放到服务器上,以便可以使用 SSH 密钥身份验证登录。
回复