自行创建私钥登录vps的方法

切换到root用户(可选步骤)

如果你是用非root用户登录的话,需要切换到root用户

1
2
3

sudo passwd root

输入两次你想设置的 root 密码即可。

切换到 root 测试

执行:

1
2
3

su -

输入刚才设置的 root 密码。

编辑 SSH 配置:

1
2
3

sudo nano /etc/ssh/sshd_config

找到:

1
2
3

PermitRootLogin prohibit-password

改成:

1
2
3

PermitRootLogin yes

保存退出后重启 SSH:

1
2
3

sudo systemctl restart ssh

然后重新登录即可

查看登录日志

1
2
3

sudo tail -f /var/log/auth.log

日志里面的Failed password就是密码错误的日志,大量这样的日志代表你的服务器正在被暴力破解

生成 ed25519 key

在你的电脑上执行

1
2
3

ssh-keygen -t ed25519

会生成id_ed25519id_ed25519.pub文件

上传公钥到vps

然后把 .pub 公钥加到服务器 /root/.ssh/authorized_keys

1
2
3

cat ~/.ssh/id_ed25519.pub >> /root/.ssh/authorized_keys

加完之后设置权限,确保只有 root 自己能读写自己的 SSH 配置文件

1
2
3
4

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

然后就可以通过私钥文件测试登录了,私钥登录测试成功以后,一定要关闭密码登录

1
2
3

ssh -p 22 -i id_ed25519 root@ip

关闭密码登录

新建一个conf写上我们的策略,覆盖掉原有策略

1
2
3

sudo nano /etc/ssh/sshd_config.d/01-custom.conf

编辑内容如下:

1
2
3
4
5
6
7
8
9
10
11

Port 6222 # 指定端口

PasswordAuthentication no # 关闭密码登录

KbdInteractiveAuthentication no # 禁止交互密码

PubkeyAuthentication yes # 允许公钥登录

PermitRootLogin prohibit-password # 禁止root密码登录

ctrl + o保存,ctrl + x退出

编辑完之后,检查配置语法

1
2
3

sudo sshd -t

如果没输出:

说明 OK

如果开启了防火墙,需要开放端口

1
2
3

sudo ufw allow 6222/tcp

然后重启ssh服务,注意执行这个以后会关闭掉当前终端,需要新开一个终端用6222端口连接,一定要确保6222端口开启

1
2
3

sudo systemctl stop ssh.socket && sudo systemctl disable ssh.socket && sudo systemctl restart ssh && sudo pkill -9 sshd && sudo systemctl restart ssh

最后验证ss -tlnp | grep ssh或者sudo ss -tlnp | grep 6222是否有端口开启,当看到LISTEN 0 128 0.0.0.0:6222 时,说明端口开启成功

接下来可以测试私钥登录和密码登录,如果密码登录不行,私钥登录可以,就证明我们已经成功配置私钥登录

可以清空登录日志,观察日志是否变干净了

1
2
3

sudo truncate -s 0 /var/log/auth.log