Linux 安全密钥验证

前言

偶然间使用 lastb 看了下登陆失败的日志,瞬间惊了。每天都有几十个 IP 进行上百次的暴力破解。

[root@konekomoe:~]# lastb | grep "root" | grep "Sat Feb 22"
......
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:08 - 06:08  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:08 - 06:08  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:08 - 06:08  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:08 - 06:08  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
root     ssh:notty    71.88.xxx.xx     Sat Feb 22 06:07 - 06:07  (00:00)
......

准备做点防止暴力破解的措施的时候,突然想到,可以直接禁用使用账户密码登陆的方式,改用密钥验证。这样,就安全很多,也更方便。

Windows

以 Xshell 及 Debian 为例。

新建用户密钥生成向导

依次点击“工具 -> 新建用户密钥生成向导(W)...”。其中“密钥类型”和“密钥长度”保持默认,点击两次下一步。根据提示,键入“密钥名称”和“密码”,其中密钥名称可保持默认。再点击下一步。

公钥注册

此时就看到了这个界面。为了方便,直接把公钥复制下来。

登陆 Linux 的服务器。在 ~ 目录下创建一个名为“.ssh”的目录。

mkdir ~/.ssh && nano ~/.ssh/authorized_keys

将刚才复制的公钥粘贴在新创建的文件里,使用 Ctrl + X 并键入 y 保存。再更改 authorized_keys 的权限。

chmod -R go= ~/.ssh

值得注意的是,如果使用 root 账户为其他账户操作,还需要把用户和用户组更改为对应的账户。

chown -R user:usergroup ~/.ssh

更改 sshd 的配置,禁用密码登录。

nano /etc/ssh/sshd_config

使用 Ctrl + W 搜索 PasswordAuthentication。如果被“#”注释,去掉,并将后面的 no 改为 yes。使用 Ctrl + X 并键入 y 保存。

重新载入 sshd 配置。

systemctl reload ssh

此时,先不要急着关闭连接。建立一个新的选项卡,测试是否不能登录。

ssh root@ip

如果不能使用 Password 登陆,则配置生效。此时,再测试使用 Public Key 是否能登陆。

成功后,可关闭之前的连接。

Linux

以 Raspbian 为例。

先在客户端(需要 SSH 连接其他服务器的计算机)上生成一个密钥对。

[pi@raspberrypi:~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa): 直接回车即可
Created directory '/home/pi/.ssh'.
Enter passphrase (empty for no passphrase): 还是建议输入密码
Enter same passphrase again: 重复密码
Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CojzzIIDUHxyqlYelXuAvasKMNZlexMh5VW0y/8OIqU pi@raspberrypi
The key's randomart image is:
+---[RSA 2048]----+
| .. o.oo .oo     |
| .o.o=o o   .    |
|.  =.o+o   .     |
|..o+oo... . .    |
|*o+.o.ooS  +     |
|*B . o... o .    |
|* + . .  E . o   |
|.o .      . . o  |
| ..           .o |
+----[SHA256]-----+

将公钥传送到其他计算机(还是在客户端)。

pi@raspberrypi:~/.ssh $ ssh-copy-id root@ip
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/pi/.ssh/id_rsa.pub"
The authenticity of host 'xx.xxx.xxx.xxx (xx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:BuueQ3ub6j+uffNcaxw6SRvRzPtKEmYGFP/SCqMBerE.
Are you sure you want to continue connecting (yes/no)? yes # 这里输入 yes 并回车就好
/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
root@ip's password:此处输入其他计算机的 SSH 密码

更改 sshd 的配置,禁用密码登录。

nano /etc/ssh/sshd_config

使用 Ctrl + W 搜索 PasswordAuthentication。如果被“#”注释,去掉,并将后面的 no 改为 yes。使用 Ctrl + X 并键入 y 保存。

重新载入 sshd 配置。

systemctl reload ssh

使用 ssh username@ip 测试能否成功登陆。如果成功,即可断开与服务器的连接。

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注