summaryrefslogtreecommitdiff
path: root/content/notes/ssh-keys-over-pswd.md
blob: a7c4f9c1d0b00d12e445ca32d8bcaa60a8b48e23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
+++
title = "加固 VPS:密钥替代密码"
date = 2026-01-26T14:57:33Z
tags = ["运维", "Linux"]
+++

购置了 Contabo VPS,想要在服务器层面加固防护,遂做此笔记。

## 1. 配置 SSH 密钥登录

在本地生成一对 SSH 密钥对,使用 ed25519 算法而非老旧的 RSA。

```shell
ssh-keygen -t ed25519
```

密钥默认保存在 `~/.ssh/id_ed25519`,可以更改位置。生成过后,需要将公钥放到服务器上,具体的原理在此不赘述。最方便的做法是使用 `ssh-copy-id`,如下:

```shell
ssh-copy-id <username>@<ip_address>
```

SSH 登录到 VPS,测试能否使用保存在本地的 SSH 密钥直接登录。如果在 `ssh-keygen` 时设置了 Passphrase,此时也需要输入 Passphrase 才能登录。如果觉得麻烦,可以使用 `ssh-agent`。

```shell
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519   # 之后会要求输入 Passphrase
```

然后再次 SSH 登录到服务器测试,看看能否不输入 Passphrase 直接登录。最后,要保存好 SSH 密钥,最好离线备份在移动硬盘里,或者重复上述步骤生成一个备用密钥放在别处。

## 2. 禁用密码登录和 Root 登录

密码登录很容易被暴力破解,能够用 SSH 密钥登录之后最好禁用密码登录。这一步要额外小心,不然有可能被锁在服务器外面。

修改服务器上的 SSH 配置:

```shell
vim /etc/ssh/sshd_config
```

找到 `PasswordAuthentication`(允许密码认证)和 `PermitRootLogin`(允许 Root 登录),删掉前面的 `#` 注释,把 `yes` 改成 `no`。保存,然后 `sudo systemctl restart ssh`。

## 参考

- https://blog.eimoon.com/p/ubuntu-ssh-key-setup-guide/