如何在Ubuntu 18.04上配置SSH密钥

简介

SSH(或安全外壳)是用于管理服务器并与服务器通信的加密协议。使用Ubuntu服务器时,您很可能会花费大部分时间在通过SSH连接到服务器的终端会话中。

如何在Ubuntu 18.04上配置SSH密钥
如何在Ubuntu 18.04上配置SSH密钥

在本指南中,我们将重点介绍为原始Ubuntu 18.04安装设置SSH密钥。SSH密钥提供了一种简单,安全的登录服务器的方法,建议所有用户使用。

步骤1 —创建RSA密钥对

第一步是在客户端计算机上创建密钥对:

ssh-keygen

默认情况下,ssh-keygen将创建一个2048位RSA密钥对,对于大多数服务器实例来说,这已经足够安全了(也可以使用ssh-keygen -b 4096选择创建4096位密钥)。

输入命令后,应该看到以下输出:

OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/home/.ssh/id_rsa):

按Enter键将密钥对保存到.ssh/的子目录中,也可以指定其他路径。

如果先前已生成SSH密钥对,则可能会看到以下提示:

Output/home/home/.ssh/id_rsa already exists.
Overwrite (y/n)?

如果选择覆盖原有密钥,则将无法再继续使用先前的密钥进行身份验证。操作时要非常小心,因为这是一个不可逆的操作。

然后,应该会看到以下提示:

OutputEnter passphrase (empty for no passphrase):

在这里,可以选择输入安全密码,也可以选择不输入。不过强烈建议输入该密码,这样可以增加一层额外的安全保护,以防止未经授权的用户登录。

然后,应该看到以下输出:

OutputYour identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.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密钥进行身份验证和登录。

步骤2 —将公钥复制到Ubuntu服务器

将公钥复制到Ubuntu主机的最快速的方法是使用ssh-copy-id。如果ssh-copy-id客户端计算机上没有可用的磁盘,则可以使用本节提供的两种替代方法之一(通过基于密码的SSH复制或手动复制密钥)。

使用ssh-copy-id复制公钥 

要使用此工具,你需要有连接到SSH的用户名和密码,ssh-copy-id工具已经默认被包含在许多操作系统中。

要使用该程序,只需要如下所示,输入远程主机的用户名和IP,然后输入密码,就可以将公共密钥被复制到远程主机帐户。

语法为:

ssh-copy-id username@remote_host

可能会看到以下消息:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

可能会提示本地计算机无法识别远程主机。第一次连接时会有此提示,输入“yes”,然后按ENTER继续。

接下来,程序将在本地帐户中扫描我们之前创建的密匙文件id_rsa.pub。找到密钥后,它将提示输入远程用户帐户的密码:

Output/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/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
username@203.0.113.1's password:

输入密码(出于安全考虑,不会显示输入的内容),然后按ENTER。程序将连接到远程主机账户。然后,它将~/.ssh/id_rsa.pub密钥内容复制到远程帐户home~/.ssh目录中名为authorized_keys的文件中。

应该会看到以下输出:

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.

此时,我们的id_rsa.pub密钥已上传到远程帐户。可以继续执行第三步。

使用SSH复制公钥

如果没有用户名和密码,但是拥有已经连接到SSH连接的客户端,则可以使用传统的SSH方法上载密钥。

我们可以使用cat命令来执行此操作:读取本地计算机上的公共SSH密钥的内容,然后通过SSH连接到远程服务器来传递这些内容。

另一方面,我们要确保该~/.ssh目录存在并且在我们正在使用的帐户下具有相应的权限。

然后,我们可以将SSH密钥内容输出到此目录中名为authorized_keys的文件中。我们将使用“>>”重定向符号来将SSH密钥的内容附加到文件末端。这样,我们既能添加密钥,又不会破坏先前添加的密钥。

完整的命令如下所示:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

您可能会看到以下消息:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

这意味着本地计算机无法识别远程主机。一般是在第一次连接到新主机时出现这种情况。输入“是”,然后按ENTER继续。

之后,系统将提示输入远程用户帐户密码:

Outputusername@203.0.113.1's password:

输入密码后,id_rsa.pub密钥的内容将被复制到authorized_keys远程用户帐户文件的末尾。如果成功,请继续执行第三步。

手动复制公钥

如果没有对服务器的基于密码的SSH访问,则必须手动完成上述过程。

我们将手动将id_rsa.pub文件内容附加到~/.ssh/authorized_keys远程计算机上的文件中。

要显示id_rsa.pub密钥的内容,请在本地计算机中键入以下内容:

cat ~/.ssh/id_rsa.pub

将看到密钥的内容,该内容应类似于如下所示:

Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

使用任何可用的方法连接远程服务器。

一旦可以访问远程服务器上的帐户,就要确保~/.ssh目录存在。如有必要,可以使用如下命令创建该目录;如果目录已经存在,则无需执行任何操作:

mkdir -p ~/.ssh

现在,可以在此目录中创建或修改authorized_keys文件。我们可以使用以下命令将id_rsa.pub文件内容添加到authorized_keys文件末尾:

echo public_key_string >> ~/.ssh/authorized_keys

在上面的命令中,将“public_key_string”替换为执行“cat ~/.ssh/id_rsa.pub”命令输出的内容。它应该以ssh-rsa AAAA...开头。

最后,我们确保~/.ssh目录和authorized_keys文件具有相应的权限:

chmod -R go= ~/.ssh

这递归删除了“group”和“other”对~/.ssh/目录的所有权限。

如果是正在使用root帐户设置新用户的密钥,则~/.ssh目录属于新用户而不属于root

chown -R niuqi:niuqi ~/.ssh

现在,我们就可以尝试使用无密码身份验证了。

第3步—使用SSH密钥对Ubuntu Server进行身份验证

如果已经成功完成上述过程,则无需使用远程主机的用户名和密码就可以登录该主机了。

ssh username@remote_host

如果这是第一次连接到该主机(如果使用了上面第二种方法),则可能会看到类似以下的内容:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

提示本地计算机无法识别远程主机。键入“是”,然后按ENTER以继续。

如果没有设置私钥的密码,则会立即登录。如果为私钥创建了密码,则会提示输入密码(请注意,出于安全性考虑,点击键盘输入的内容不会显示出来)。

如果密钥身份验证成功,我们继续讲述如何禁用密码身份验。

步骤4 —在服务器上禁用密码身份验证

如果已经无需密码就可以登录帐户,则说明已成功为帐户配置了SSH密钥的身份验证。但是,基于密码的身份验证机制仍处于激活状态,为了安全我们应将其关闭。

在完成本步骤之前,请确保已为此服务器上的root帐户配置了SSH密钥的身份验证,或者最好是已经为服务器上具有sudo权限的非root帐户配置了SSH密钥身份验证。接下来,我们就开始配置禁用密码身份验证方式。

使用SSH密钥(以root用户或具有sudo权限的用户)登录到服务器。然后,打开SSH的配置文件:

sudo nano /etc/ssh/sshd_config

在文件中,搜索名为PasswordAuthentication的指令,取消注释该行,并将值设置为“ no”。这样就可以禁止使用账号和密码进行登录:

/ etc / ssh / sshd_config

...
PasswordAuthentication no
...

完成后,请按CTRL+X保存并关闭文件,然后按Y确认保存,最后按ENTER退出nano。重新启动sshd服务使配置生效:

sudo systemctl restart ssh

重新打开一个终端窗口并测试SSH登录是否正常:

ssh username@remote_host

验证SSH可以成功登录后,就可以关闭当前所有服务器对话框。

现在,Ubuntu服务器已经被配置为仅能使用SSH密钥进行身份验证了。

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/lamp-config/how-set-up-ssh-keys-ubuntu/

发表评论

登录后才能评论