介绍
SSH,或安全壳,是一个网络协议,提供了一个安全的,加密的方式来与您的服务器进行通信和管理.由于SSH是与FreeBSD服务器工作的最常见方式,您将想熟悉不同的方式,您可以身份验证和登录到您的服务器。
注意:从 2022 年 7 月 1 日开始,DigitalOcean 不再支持通过控制面板或 API 创建新的 FreeBSD Droplets. 但是,您仍然可以使用自定义图像创建 FreeBSD Droplets. 了解如何按照 我们的产品文档导入自定义图像到 DigitalOcean。
SSH 密钥如何工作
SSH服务器可以使用各种方法验证客户端。最常见的方法包括密码和SSH密钥验证.虽然密码确实提供了防止未经授权的访问的障碍,但使用SSH密钥通常更安全。
密码的问题是,它们通常是手动创建的,没有足够的长度或内容复杂性,因此,它们可能会受到暴力攻击的威胁。
SSH密钥对可以用来代替密码进行身份验证,每个密钥对由一个私钥和一个相应的公共密钥组成。
私钥 与密码类似,并保存在客户端计算机上。其内容必须保密 - 如果未经授权的人获得访问您的私钥,应该被视为受到损害,并应立即更换。
相关的 公共密钥 可以自由共享,没有任何负面后果,它可以用来加密只有私钥才能解密的消息 - 这就是 SSH 密钥身份验证工作的基础。
为了能够使用私钥进行认证,相应的公钥被安装到远程服务器上的用户账户上. 公共密钥必须添加到远程用户主目录中称为'.ssh/授权_keys'的特殊文件中. 当客户端试图连接到远程服务器时,服务器可以验证客户端是否有与授权的密钥之一对应的私钥——如果私钥被验证与授权的公钥相匹配,则客户端被认证并启动 shell会话.
如何创建一个SSH密钥对
在设置 SSH 密钥身份验证的第一步是在您的本地计算机上生成一个 SSH 密钥对,您将登录的计算机。
要生成一个SSH密钥对,您可以使用ssh-keygen
实用程序. 默认情况下,它将创建一个2048位的RSA密钥对,这对于大多数情况来说是足够的。
在本地计算机的终端中,使用此命令生成一个密钥对:
1ssh-keygen
你会看到这样的输出:
1Generating public/private rsa key pair.
2Enter file in which to save the key (/home/username/.ssh/id_rsa):
在提示中,您可以接受默认密钥的位置或输入不同的路径. 如果您接受默认密钥,密钥将存储在您的用户主目录中的 .ssh
目录中。
如果您刚刚开始使用 SSH 密钥,最好坚持默认位置。这样做将允许您的 SSH 客户端在尝试验证时自动找到您的 SSH 密钥。如果您想选择非默认路径,请现在输入,否则将提示留在空中并按RETURN
来接受默认。
如果您以前生成了一对 SSH 密钥对,您可能会看到这样的提示:
1/home/username/.ssh/id_rsa already exists.
2Overwrite (y/n)?
如果你选择重写现有密钥,它将被删除,你将不再能够使用它来验证,也就是说,你不应该重写它,除非你确定你不需要它来验证你的任何服务器。
在此时刻,你应该看到一个提示句子:
1Created directory '/home/username/.ssh'.
2Enter passphrase (empty for no passphrase):
3Enter same passphrase again:
此可选密码句用于加密私钥 。 如果您在这里设置了密码句, 当您使用私人密钥进行认证时, 就需要它 —— 即认证既需要私人密钥_ , 也需要_ 其密码句, 如果私人密钥被某种方式损坏, 则可以提供额外的安全 。 如果您将密码句留为空白, 您可以使用私钥登录到您的服务器, 而无需使用 _ password , 也就是说, 认证将仅根据您的私钥进行, 所以请确保您的密钥安全 .
在此之后,您将看到以下输出,该输出将告诉您在哪里创建私钥和公共钥匙,以及其他细节:
1Your identification has been saved in /home/sammy/.ssh/id_rsa.
2Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
3The key fingerprint is:
476:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
5The key's randomart image is:
6+--[ RSA 2048]----+
7| . ...o.|
8| . o o .|
9| . .E.+.|
10| o .ooo|
11| o S . o..|
12| X + . |
13| o + |
14| + |
15| o |
16+-----------------+
现在你有一个公共和私人 SSH 密钥对,你将想要在你想要使用 SSH 密钥身份验证登录的服务器上安装公共密钥。
如何将公钥复制到您的服务器
如果您已经拥有一个 FreeBSD 服务器,并且在创建过程中没有添加 SSH 密钥(如上一节所描述), 还有其他几种方法可以添加您的公钥并使用您的私钥认证到您的服务器. 每种方法最终都得出相同的结果,即能够使用您的 SSH 密钥对在服务器上认证给特定用户. 注意,您可以重复其中任何一种方法来安装多个SSH密钥(允许访问任何对应的私钥的所有者).
我们将描述几种不同的方法,从最简单的开始. 只需使用你有工具的方法,你最舒服。
使用 SSH-Copy-ID 复制您的公共密钥
如果您在本地计算机上有ssh-copy-id
实用程序,您可以使用它轻松地将一个公共 SSH 密钥添加到您有基于密码的 SSH 访问的远程服务器上。
若要检查您在本地计算机上是否有该工具,只需尝试从命令行运行ssh-copy-id
。如果该工具不可用,则会收到命令未找到
错误。
要使用「ssh-copy-id」,您必须指定远程主机的 IP 地址或域名,并将用户添加到公共 SSH 密钥,可以这样运行(用适当的信息替换突出部分):
1ssh-copy-id username@remote_host
你可能会看到这样的信息:
1The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
2ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
3Are you sure you want to continue connecting (yes/no)? yes
这意味着您的本地计算机无法识别远程服务器,因为它以前从未尝试过使用SSH连接到它。
该实用程序将扫描您的本地用户帐户以获取您之前创建的公共密钥, id_rsa.pub
. 当它被找到时,您将被要求在远程服务器上找到该用户的密码:
1/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
2/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
3[email protected]'s password:
输入密码,然后点击RETURN
。 该实用程序将连接到远程主机上的用户帐户并安装您的公共密钥,id_rsa.pub。
如果复制成功,您将看到这样的输出:
1Number of key(s) added: 1
2
3Now try logging into the machine, with: "ssh '[email protected]'"
4and check to make sure that only the key(s) you wanted were added.
由于您的公共密钥已安装在远程用户的)将被接受为远程服务器上的用户身份验证。
继续到 Authenticate to your Server Using SSH Keys 部分,以使用 SSH 密钥登录到您的服务器。
使用 SSH 复制您的公共密钥
如果您在本地计算机上没有ssh-copy-id
,但您有基于密码的 SSH 访问到您的服务器,您可以使用 SSH 客户端安装公共密钥。
这种方法通过在您的本地计算机上输出公共 SSH 密钥, 并通过 SSH 输出到删除的服务器 。 在远程服务器上,我们执行几个命令来创建QQ/.ssh'目录,如果它不存在的话,然后将公用密钥添加到名为"授权的_keys"的文件中. 我们将使用 QQ 重定向将密钥附加到) .
假设您的公共密钥具有默认名称, `id_rsa.pub',以下是安装公共 SSH 密钥的命令(取代远程用户和主机):
1cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
你可能会看到这样的信息:
1The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
2ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
3Are you sure you want to continue connecting (yes/no)? yes
这意味着您的本地计算机无法识别远程服务器,因为它以前从未尝试过使用SSH连接到它。
现在,您将被要求提供远程用户的密码:
1[email protected]'s password:
输入密码,然后点击RETURN
。如果命令被成功执行,您将不会收到任何反馈。id_rsa.pub
的内容,您的公共密钥,将附加到远程用户的autorized_keys
文件的末尾。
继续到 Authenticate to your Server Using SSH Keys 部分,以使用 SSH 密钥登录到您的服务器。
手动复制您的公共密钥
如果您更愿意手动安装公共密钥,您可以使用 SSH 或控制台访问来做到这一点,您将被要求登录远程服务器作为您想要安装公共密钥的用户。
基本过程是拿起你的公共SSH密钥,即id_rsa.pub的内容,并将其添加到远程主机上的用户主目录中的.ssh/authorized_keys
文件中。
首先,登录远程服务器,您可以使用以下命令通过SSH连接:
1ssh username@remote_host
你可能会看到这样的信息:
1The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
2ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
3Are you sure you want to continue connecting (yes/no)? yes
这意味着您的本地计算机无法识别远程服务器,因为它以前从未尝试过使用SSH连接到它。
现在,您将被要求提供远程用户的密码:
1Password for [email protected]:
现在你应该在远程用户的主目录中创建一个 .ssh
目录,如果它还不存在,这个命令只会这样做:
1mkdir -p ~/.ssh
在您的本地计算机上,将此命令输入终端,以打印您的公共 SSH 密钥:
1cat ~/.ssh/id_rsa.pub
将输出复制到您的剪辑板,然后在您选择的文本编辑器中打开authorized_keys
文件。
1ee ~/.ssh/authorized_keys
将您的公共密钥粘贴到autorized_keys
文件中,然后保存并退出。
您的公共 SSH 密钥现在已安装在远程服务器上. 继续进入下一节以使用 SSH 密钥登录您的服务器。
使用 SSH 密钥对您的服务器进行身份验证
如果您使用上述方法在您的 FreeBSD 服务器上成功安装了公共 SSH 密钥,您应该能够使用密钥身份验证登录服务器,也就是说,您将不再需要远程用户的密码登录。
尝试使用 SSH 登录远程服务器:
1ssh username@remote_host
如果你没有用passphrase创建你的SSH密钥对,你将立即登录,如果你用passphrase创建了你的密钥对,你将被提示。
如果您已登录到您的服务器,这意味着SSH密钥已成功安装。
请注意,此用户现在已启用了密码和基于密钥的身份验证,如果您想禁用服务器的密码身份验证,通过要求 SSH 密钥登录来使其更安全,请参阅下一节。
在您的服务器上禁用密码身份验证
如果您可以使用 SSH 登录帐户而没有密码,则已成功配置 SSH 基于密钥的身份验证到您的帐户,但是,您的基于密码的身份验证机制仍然活跃,这意味着您的服务器仍然受到暴力攻击。
在完成本节中的步骤之前,请确保您已为本服务器上的根帐户配置了基于 SSH 密钥的身份验证,或者最好是为该服务器上的具有 sudo 访问的帐户配置了基于 SSH 密钥的身份验证。
一旦上述条件是真实的,请使用 SSH 密钥登录您的远程服务器,无论是作为 root 或具有 sudo 特权的帐户。
1sudo ee /etc/ssh/sshd_config
在文件中,找到一个名为ChallengeResponseAuthentication
的指令. 它可能会被评论。 删除#
字符,然后将值设置为不
。
1ChallengeResponseAuthentication no
如果您正在使用ee
,则按ESC
然后再按a
,然后再按a
。
要使这些更改生效,您必须重新启动sshd
服务. 若要在 FreeBSD 上重新启动 SSH 戴蒙,请使用以下命令:
1sudo service sshd restart
现在,任何 SSH 访问服务器都必须使用 SSH 密钥身份验证,因为密码身份验证已被禁用。
结论
您现在应该在您的 FreeBSD 服务器上安装并运行基于 SSH 的密钥的身份验证,允许您在不提供用户密码的情况下登录。从这里开始,您可能想更多地了解如何保护您的 FreeBSD 服务器。如果您想了解更多关于使用 SSH 的信息,请参阅我们的 SSH 基本指南。