帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何生成SSH密钥并将其复制到服务器?

如何生成SSH密钥并将其复制到服务器?

发布时间:2020年06月10日 09:08:47    来源: A5互联

您是否使用SSH管理远程服务器,并使用用户名和密码登录?然后是时候切换到另一种方法:用SSH密钥对识别自己的方法。本教程向您展示如何生成SSH密钥并将其复制到服务器。通过SSH密钥对登录可以提高安全性。同时,它为您增加了便利,因为它使您无需每次都输入密码即可登录。

本文提供的说明适用于通过SSH连接到Debian服务器的Debian PC。但是,Debian不是先决条件,因为其他Linux发行版的命令非常相似。

说明了示例中使用的网络设置。 它由本地网络上的Debian PC和Internet上的Debian Linux服务器组成。

一、背景资料

设置具有SSH访问权限的Linux服务器后,通常可以通过提供用户名和密码来登录。这很好,但是安全性如何?对于面向Internet的服务器,只有一个人确定其IP地址并确定服务器接受SSH连接才是时间问题。那些怀有恶意的人可以运行自动化脚本,以不断尝试通过SSH获得访问权限。每次尝试连接时,他们都会尝试使用不同的用户名和密码,以希望他们可以登录。他们的最终目标是控制您的服务器。作为服务器的管理员,您想不惜一切代价避免发生这种噩梦。

降低这种意外情况发生风险的一种方法是生成SSH密钥并将其复制到服务器。理想情况下,设置服务器后请尽快执行此操作。之后,您可以使用用户名和密码完全禁用SSH登录。请注意,后面的部分将在以后的文章中介绍。

二、什么是SSH密钥?

SSH密钥本质上由两个属于在一起的文件组成。一个称为公钥,另一个称为私钥。此密钥对形成独特的组合,其内容基于难以破解的密码学。由于这些特性,另一个密钥对几乎不可能相同,因此使其成为用于SSH身份验证的理想且安全的选项。您的服务器拥有公钥的副本,而私钥应仅位于您的PC上。顾名思义,请勿与其他任何人共享私钥。

三、生成SSH密钥对

第一步,我们生成一个新的SSH密钥对。您可以在自己的PC上执行此步骤。在Linux上,该~/.ssh目录指定用于存储SSH密钥。因此,让我们开始打开终端并转到以下目录:

cd ~/.ssh

如果收到错误消息指出该目录没有退出,请使用以下命令创建它:

mkidr ~/.ssh

现在您在正确的目录中,通过输入以下命令开始SSH密钥对创建过程:

ssh-keygen

程序提示您输入密钥对的文件名。在此示例中,我指定debian_server为名称,但是您可以将其更改为您喜欢的任何名称。接下来,程序提示您输入密码。这是您选择的文本字符串,每次使用密钥进行身份验证时都需要输入。为了方便起见,您只需按Enter两次即可将密码短语留空。您现在拥有一个崭新的SSH密钥对品牌。调用debian_server私钥文件,并调用公钥文件debian_server.pub:

终端屏幕截图显示了如何在程序ssh-keygen的帮助下生成新的RSA 2048 SSH密钥对。

四、Putty用户须知

生成的私钥文件可与所有主要Linux发行版上默认提供的OpenSSH工具配合使用。如果您还运行Windows并想从该操作系统连接到服务器,则可以使用Putty程序通过SSH连接到服务器。不幸的是,Putty无法理解生成的私钥文件的格式。相反,它期望带有.ppk扩展名的文件。幸运的是,可以使用工具来生成此.ppk版本的私钥文件。

首先安装必要的软件包。在Debian下运行命令:

sudo apt install putty-tools

接下来,在~/.ssh目录中打开终端,然后输入以下命令以生成debian_server.ppk用于Putty 的私钥文件:

puttygen debian_server -o debian_server.ppk

五、注册私密SSH密钥

在Debian和大多数其他Linux发行版中,SSH身份验证代理在后台运行。如果您在身份验证代理中注册新创建的私有SSH密钥文件,则无需在每次通过SSH连接到服务器时都指定私有SSH密钥文件的名称和位置。因此,这一步骤不是绝对必要的,但是它使您的服务器管理工作变得更加便捷。

注册私有SSH密钥文件之前,请打开终端并验证SSH身份验证代理是否正在实际运行。接下来,借助ssh-add程序进行注册:

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/debian_server

向私有SSH密钥文件显示的终端屏幕截图已向SSH身份验证代理注册。

这样就可以在您自己的PC上完成私密SSH密钥文件的设置。请注意,如果你需要注销从认证代理的SSH私钥文件,你可以用相同的命令并指定这样做的-D选项:ssh-add -D ~/.ssh/debian_server。

六、将SSH密钥复制到服务器

完成所有SSH密钥对设置的最后一步是将公用SSH密钥文件复制到您的服务器。因此,当前仍可通过SSH使用普通用户名和密码访问的服务器。出于示例目的,我将使用在VirtualBox中为上一教程创建的Debian服务器来演示此步骤。它的主机名是debianvm,我的用户名与PC上的用户名相同a5idc。

要将公共SSH密钥文件复制到您的服务器,请运行以下命令,只需将a5idc用户名和debianvm主机名替换为适用于特定服务器的值即可:

ssh-copy-id -i debian_server.pub a5idc@debianvm

终端屏幕截图解释了如何在ssh-copy-id程序的帮助下将SSH密钥复制到服务器。

这会将公共SSH密钥文件添加到~/.ssh/authorizedkeys您的服务器上。

七、使用SSH密钥进行身份验证

到目前为止,我们已经生成了一个新的SSH密钥对,并在您自己的PC上运行的SSH身份验证代理中注册了私有SSH密钥文件,并将公共SSH密钥文件复制到了您的服务器上。剩下要做的唯一一件事就是验证我们现在可以使用SSH实际连接到服务器并使用新的SSH密钥对进行身份验证。

您可以运行常规命令以使用SSH连接到服务器。所以ssh@ip-address还是ssh@hostname。成功设置SSH密钥对后,您会发现不再需要输入密码:

终端屏幕截图,显示您现在如何使用远程服务器上的SSH密钥对进行身份验证。

这是通过SSH密钥进行SSH身份验证的最终证明。希望您喜欢本教程,并希望在此多补充两点:

(1)确保不要将您的私密SSH密钥提供给任何其他人或将其存储在公共位置。如果他们拥有您的私密SSH密钥,则知道服务器的主机名和该服务器上的用户名,便可以访问。如果您担心这种情况会发生,请在生成SSH密钥对时输入一个密钥短语。这增加了一层额外的安全性。

(2)您可以将SSH密钥对重用于多个服务器。只需将SSH公用密钥文件复制到要使用同一ssh-copy-id命令管理的所有服务器上,如上一节所述。