PRF: #10302 完成校对

This commit is contained in:
pityonline 2018-10-05 08:46:53 +08:00
parent 989d865cc3
commit cc71cdf04c
No known key found for this signature in database
GPG Key ID: 89C97C8DF02C633E

View File

@ -13,7 +13,7 @@
### 在 Linux 上配置基于密钥认证的 SSH ### 在 Linux 上配置基于密钥认证的 SSH
本篇教程起见,我将使用 Arch Linux 为本地系统Ubuntu 18.04 LTS 为远程系统。 方便演示,我将使用 Arch Linux 为本地系统Ubuntu 18.04 LTS 为远程系统。
本地系统详情: 本地系统详情:
@ -27,7 +27,7 @@
### 本地系统配置 ### 本地系统配置
就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,就应该将公钥上传给它。公钥通常会被保存在远程系统的一个文件 `~/.ssh/authorized_keys` 中。 就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,需要将公钥上传到远程系统。公钥通常会被保存在远程系统的一个 `~/.ssh/authorized_keys` 文件中。
**注意事项**:不要使用 **root** 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。 **注意事项**:不要使用 **root** 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。
@ -37,9 +37,9 @@
$ ssh-keygen $ ssh-keygen
``` ```
上面的命令将会创建一个 2048 位的 RSA 密钥对。输入两次密码。更重要的是,记住你的密码。后面将会用到它。 上面的命令将会创建一个 2048 位的 RSA 密钥对。你需要输入两次密码。更重要的是,记住你的密码。后面将会用到它。
样例输出: **样例输出**
``` ```
Generating public/private rsa key pair. Generating public/private rsa key pair.
@ -71,15 +71,15 @@ The key's randomart image is:
Overwrite (y/n)? Overwrite (y/n)?
``` ```
请注意**密码是可选的**。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地输入两次 ENTER。不过我们建议你使用密码。从安全的角度来看使用无密码的 ssh 密钥对大体上不是一个很好的主意。这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份……) 请注意**密码是可选的**。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地敲两次回车。不过,我建议你使用密码。从安全的角度来看,使用无密码的 ssh 密钥对不是什么好主意。这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份……)
如果你已经在个人文件 `~/.ssh/id_rsa` 中有了无密码的密钥,但想要更新为带密码的密钥。使用下面的命令: 如果你已经在个人文件 `~/.ssh/id_rsa` 中有了无密码的密钥,但想要更新为带密码的密钥。使用下面的命令:
``` ```
$ ssh-keygen -p -f ~/.ssh/id_rsa $ ssh-keygen -p -f ~/.ssh/id_rsa
``` ```
样例输出: **样例输出**
``` ```
Enter new passphrase (empty for no passphrase): Enter new passphrase (empty for no passphrase):
@ -93,18 +93,18 @@ Your identification has been saved with the new passphrase.
$ ssh-copy-id sk@192.168.225.22 $ ssh-copy-id sk@192.168.225.22
``` ```
在这我把本地Arch Linux系统上的公钥拷贝到了远程系统Ubuntu 18.04 LTS上。从技术上讲上面的命令会把本地系统 `~/.ssh/id_rsa.pub` 文件中的内容拷贝到远程系统 `~/.ssh/authorized_keys` 中。明白了吗?非常棒。 在这我把本地Arch Linux系统上的公钥拷贝到了远程系统Ubuntu 18.04 LTS上。从技术上讲上面的命令会把本地系统 `~/.ssh/id_rsa.pub` 文件中的内容拷贝到远程系统 `~/.ssh/authorized_keys` 中。明白了吗?非常棒。
输入 yes 来继续连接你的远程 SSH 服务端。接着,输入远程系统 root 用户的密码。 输入 yes 来继续连接你的远程 SSH 服务端。接着,输入远程系统 sk 用户的密码。
``` ```
/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: 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 /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
[email protected]2.168.225.22's password: sk@192.168.225.22's password:
Number of key(s) added: 1 Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'" Now try logging into the machine, with: "ssh 'sk@192.168.225.22'"
and check to make sure that only the key(s) you wanted were added. and check to make sure that only the key(s) you wanted were added.
``` ```
@ -114,13 +114,13 @@ and check to make sure that only the key(s) you wanted were added.
$ ssh-copy-id -f sk@192.168.225.22 $ ssh-copy-id -f sk@192.168.225.22
``` ```
我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为我们已经配置了密钥认证,因此我们不再需要密码认证了。 我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为我们已经配置了密钥认证,因此不再需要密码认证了。
### 在远程系统上禁用基于密码认证的 SSH ### 在远程系统上禁用基于密码认证的 SSH
你需要在 root 或者 sudo 用户下执行下面的命令。 你需要在 root 或者 sudo 用户下执行下面的命令。
为了禁用基于密码的认证,你需要在远程系统的控制台上编辑 `/etc/ssh/sshd_config` 配置文件: 禁用基于密码的认证,你需要在远程系统的终端里编辑 `/etc/ssh/sshd_config` 配置文件:
``` ```
$ sudo vi /etc/ssh/sshd_config $ sudo vi /etc/ssh/sshd_config
@ -148,19 +148,19 @@ $ ssh sk@192.168.225.22
输入密码。 输入密码。
**样例输出** **样例输出**
``` ```
Enter passphrase for key '/home/sk/.ssh/id_rsa': Enter passphrase for key '/home/sk/.ssh/id_rsa':
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37 Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
[email protected]:~$ sk@ubuntuserver:~$
``` ```
现在,你就能 SSH 你的远程系统了。如你所见,我们已经使用之前 **ssh-keygen** 创建的密码登录进了远程系统的账户,而不是使用账户实际的密码。 现在,你就能 SSH 你的远程系统了。如你所见,我们已经使用之前 `ssh-keygen` 创建的密码登录进了远程系统的账户,而不是使用当前账户实际的密码。
如果你试图从其它客户端系统 ssh远程系统你将会得到这条错误信息。比如我试图通过命令从 CentOS SSH 访问 Ubuntu 系统: 如果你试图从其它客户端系统 ssh远程系统你将会得到这条错误信息。比如我试图通过命令从 CentOS SSH 访问 Ubuntu 系统:
**样例输出:** **样例输出**
``` ```
The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established. The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
@ -184,19 +184,19 @@ $ ssh-keygen
输入两次密码。现在ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。 输入两次密码。现在ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。
使用命令查看公钥: 使用以下命令查看公钥:
``` ```
$ cat ~/.ssh/id_rsa.pub $ cat ~/.ssh/id_rsa.pub
``` ```
应该会输出如下信息: 应该会输出类似下面的信息:
``` ```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@centosserver ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@centosserver
``` ```
拷贝所有内容(通过 USB 驱动器或者其它任何介质),然后去你的远程服务端的控制台。像下面那样,在 `$HOME` 下创建文件夹叫做 `.ssh`。你需要以 root 身份执行命令。 拷贝所有内容(通过 USB 驱动器或者其它任何介质),然后去你的远程服务端的终端,像下面那样,在 `$HOME` 下创建文件夹叫做 `.ssh`。你需要以 root 身份执行命令(注:不一定需要 root
``` ```
$ mkdir -p ~/.ssh $ mkdir -p ~/.ssh
@ -210,15 +210,16 @@ echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
在远程系统上重启 ssh 服务。现在,你可以在新的客户端上 SSH 远程服务端了。 在远程系统上重启 ssh 服务。现在,你可以在新的客户端上 SSH 远程服务端了。
如果觉得手动添加 ssh 公钥有些困难,在远程系统上暂时性启用密码认证,使用 “ssh-copy-id“ 命令从本地系统上拷贝密钥,最后关闭密码认证。 如果觉得手动添加 ssh 公钥有些困难,在远程系统上暂时性启用密码认证,使用 `ssh-copy-id` 命令从本地系统上拷贝密钥,最后禁用密码认证。
**推荐阅读:** **推荐阅读:**
(译者注:在原文中此处有超链接) * [SSLH Share A Same Port For HTTPS And SSH][1]
* [ScanSSH Fast SSH Server And Open Proxy Scanner][2]
好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。 好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。
不久我就会带来另一篇有用的文章。到那时,继续关注 OSTechNix。 不久我会带来另一篇有用的文章。请继续关注 OSTechNix。
干杯! 干杯!
@ -234,3 +235,5 @@ via: https://www.ostechnix.com/configure-ssh-key-based-authentication-linux/
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.ostechnix.com/author/sk/ [a]: https://www.ostechnix.com/author/sk/
[1]: https://www.ostechnix.com/sslh-share-port-https-ssh/
[2]: https://www.ostechnix.com/scanssh-fast-ssh-server-open-proxy-scanner/