mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-02-25 00:50:15 +08:00
增减空行
This commit is contained in:
parent
a61da3dc09
commit
35d54c3449
@ -1,4 +1,4 @@
|
|||||||
如何在 Linux 中配置基于 SSH 密钥的认证
|
如何在 Linux 中配置基于密钥认证的 SSH
|
||||||
======
|
======
|
||||||
|
|
||||||

|

|
||||||
@ -19,14 +19,10 @@
|
|||||||
* **OS** : Arch Linux Desktop
|
* **OS** : Arch Linux Desktop
|
||||||
* **IP address** : 192.168.225.37 /24
|
* **IP address** : 192.168.225.37 /24
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
远程系统详情:
|
远程系统详情:
|
||||||
* **OS** : Ubuntu 18.04 LTS Server
|
* **OS** : Ubuntu 18.04 LTS Server
|
||||||
* **IP address** : 192.168.225.22/24
|
* **IP address** : 192.168.225.22/24
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 本地系统配置
|
### 本地系统配置
|
||||||
|
|
||||||
就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,就应该将公钥上传给它。公钥通常会被保存在远程系统的一个文件**~/.ssh/authorized_keys** 中。
|
就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,就应该将公钥上传给它。公钥通常会被保存在远程系统的一个文件**~/.ssh/authorized_keys** 中。
|
||||||
@ -34,6 +30,7 @@
|
|||||||
**注意事项:**不要使用**root** 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。
|
**注意事项:**不要使用**root** 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。
|
||||||
|
|
||||||
现在,让我们在本地系统上创建一个 SSH 密钥对。只需要在客户端系统上运行下面的命令。
|
现在,让我们在本地系统上创建一个 SSH 密钥对。只需要在客户端系统上运行下面的命令。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ssh-keygen
|
$ ssh-keygen
|
||||||
|
|
||||||
@ -42,6 +39,7 @@ $ ssh-keygen
|
|||||||
上面的命令将会创建一个 2048 位的 RSA 密钥对。输入两次密码。更重要的是,记住你的密码。后面将会用到它。
|
上面的命令将会创建一个 2048 位的 RSA 密钥对。输入两次密码。更重要的是,记住你的密码。后面将会用到它。
|
||||||
|
|
||||||
**样例输出**
|
**样例输出**
|
||||||
|
|
||||||
```
|
```
|
||||||
Generating public/private rsa key pair.
|
Generating public/private rsa key pair.
|
||||||
Enter file in which to save the key (/home/sk/.ssh/id_rsa):
|
Enter file in which to save the key (/home/sk/.ssh/id_rsa):
|
||||||
@ -67,6 +65,7 @@ The key's randomart image is:
|
|||||||
```
|
```
|
||||||
|
|
||||||
如果你已经创建了密钥对,你将看到以下信息。输入 ‘y’ 就会覆盖已存在的密钥。
|
如果你已经创建了密钥对,你将看到以下信息。输入 ‘y’ 就会覆盖已存在的密钥。
|
||||||
|
|
||||||
```
|
```
|
||||||
/home/username/.ssh/id_rsa already exists.
|
/home/username/.ssh/id_rsa already exists.
|
||||||
Overwrite (y/n)?
|
Overwrite (y/n)?
|
||||||
@ -76,12 +75,14 @@ Overwrite (y/n)?
|
|||||||
请注意**密码是可选的**。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地输入两次 ENTER。不过,我们建议你使用密码。从安全的角度来看,使用无密码的 ssh 密钥对大体上不是一个很好的主意。 这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份...)
|
请注意**密码是可选的**。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地输入两次 ENTER。不过,我们建议你使用密码。从安全的角度来看,使用无密码的 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):
|
||||||
Enter same passphrase again:
|
Enter same passphrase again:
|
||||||
@ -90,6 +91,7 @@ Your identification has been saved with the new passphrase.
|
|||||||
```
|
```
|
||||||
|
|
||||||
现在,我们已经在本地系统上创建了密钥对。接下来,使用下面的命令将 SSH 公钥拷贝到你的远程 SSH 服务端上。
|
现在,我们已经在本地系统上创建了密钥对。接下来,使用下面的命令将 SSH 公钥拷贝到你的远程 SSH 服务端上。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ssh-copy-id sk@192.168.225.22
|
$ ssh-copy-id sk@192.168.225.22
|
||||||
|
|
||||||
@ -98,6 +100,7 @@ $ ssh-copy-id sk@192.168.225.22
|
|||||||
在这,我把本地(Arch Linux)系统上的公钥拷贝到了远程系统(Ubuntu 18.04 LTS)上。从技术上讲,上面的命令会把本地系统 **~/.ssh/id_rsa.pub key** 文件中的内容拷贝到远程系统**~/.ssh/authorized_keys** 中。明白了吗?非常棒。
|
在这,我把本地(Arch Linux)系统上的公钥拷贝到了远程系统(Ubuntu 18.04 LTS)上。从技术上讲,上面的命令会把本地系统 **~/.ssh/id_rsa.pub key** 文件中的内容拷贝到远程系统**~/.ssh/authorized_keys** 中。明白了吗?非常棒。
|
||||||
|
|
||||||
输入 **yes** 来继续连接你的远程 SSH 服务端。接着,输入远程系统 root 用户的密码。
|
输入 **yes** 来继续连接你的远程 SSH 服务端。接着,输入远程系统 root 用户的密码。
|
||||||
|
|
||||||
```
|
```
|
||||||
/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
|
||||||
@ -111,10 +114,12 @@ and check to make sure that only the key(s) you wanted were added.
|
|||||||
```
|
```
|
||||||
|
|
||||||
如果你已经拷贝了密钥,但想要替换为新的密码,使用 **-f** 选项覆盖已有的密钥。
|
如果你已经拷贝了密钥,但想要替换为新的密码,使用 **-f** 选项覆盖已有的密钥。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ssh-copy-id -f sk@192.168.225.22
|
$ ssh-copy-id -f sk@192.168.225.22
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为,我们已经配置了密钥认证,因此我们不再需要密码认证了。
|
我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为,我们已经配置了密钥认证,因此我们不再需要密码认证了。
|
||||||
|
|
||||||
### 在远程系统上禁用基于密码认证的 SSH
|
### 在远程系统上禁用基于密码认证的 SSH
|
||||||
@ -122,6 +127,7 @@ $ ssh-copy-id -f sk@192.168.225.22
|
|||||||
你需要在 root 或者 sudo 用户下执行下面的命令。
|
你需要在 root 或者 sudo 用户下执行下面的命令。
|
||||||
|
|
||||||
为了禁用基于密码的认证,你需要在远程系统的控制台上编辑 **/etc/ssh/sshd_config** 配置文件:
|
为了禁用基于密码的认证,你需要在远程系统的控制台上编辑 **/etc/ssh/sshd_config** 配置文件:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo vi /etc/ssh/sshd_config
|
$ sudo vi /etc/ssh/sshd_config
|
||||||
|
|
||||||
@ -135,6 +141,7 @@ PasswordAuthentication no
|
|||||||
```
|
```
|
||||||
|
|
||||||
重启 ssh 服务让它生效。
|
重启 ssh 服务让它生效。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo systemctl restart sshd
|
$ sudo systemctl restart sshd
|
||||||
|
|
||||||
@ -144,9 +151,15 @@ $ sudo systemctl restart sshd
|
|||||||
|
|
||||||
在本地系统上使用命令 SSH 你的远程服务端:
|
在本地系统上使用命令 SSH 你的远程服务端:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ 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
|
||||||
@ -159,6 +172,7 @@ Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
|
|||||||
如果你试图从其他客户端系统 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.
|
||||||
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
|
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
|
||||||
@ -175,6 +189,7 @@ Permission denied (publickey).
|
|||||||
这点非常重要。就像我说过的那样,除非你配置过(在之前的例子中,是 Ubuntu),否则你不能通过 SSH 访问到远程系统。如果我希望给更多客户端予以权限去访问远程 SSH 服务端,我应该怎么做?很简单。你需要在所有的客户端系统上生成 SSH 密钥对并且手动拷贝 ssh 公钥到想要通过 ssh 访问的远程服务端上。
|
这点非常重要。就像我说过的那样,除非你配置过(在之前的例子中,是 Ubuntu),否则你不能通过 SSH 访问到远程系统。如果我希望给更多客户端予以权限去访问远程 SSH 服务端,我应该怎么做?很简单。你需要在所有的客户端系统上生成 SSH 密钥对并且手动拷贝 ssh 公钥到想要通过 ssh 访问的远程服务端上。
|
||||||
|
|
||||||
在客户端系统上创建 SSH 密钥对,运行:
|
在客户端系统上创建 SSH 密钥对,运行:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ssh-keygen
|
$ ssh-keygen
|
||||||
|
|
||||||
@ -183,6 +198,7 @@ $ ssh-keygen
|
|||||||
输入两次密码。现在, ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。
|
输入两次密码。现在, ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。
|
||||||
|
|
||||||
使用命令查看公钥:
|
使用命令查看公钥:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cat ~/.ssh/id_rsa.pub
|
$ cat ~/.ssh/id_rsa.pub
|
||||||
|
|
||||||
@ -194,13 +210,16 @@ $ 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 身份执行命令。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ mkdir -p ~/.ssh
|
$ mkdir -p ~/.ssh
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
现在,将前几步创建的客户端系统的公钥添加进文件中。
|
现在,将前几步创建的客户端系统的公钥添加进文件中。
|
||||||
|
|
||||||
```
|
```
|
||||||
echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
|
echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
|
||||||
|
|
||||||
@ -212,6 +231,8 @@ echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
|
|||||||
|
|
||||||
**推荐阅读:**
|
**推荐阅读:**
|
||||||
|
|
||||||
|
(译者注:在原文中此处有超链接)
|
||||||
|
|
||||||
好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。
|
好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。
|
||||||
|
|
||||||
不久我就会带来另一篇有用的文章。到那时,继续关注 OSTechNix。
|
不久我就会带来另一篇有用的文章。到那时,继续关注 OSTechNix。
|
||||||
|
Loading…
Reference in New Issue
Block a user