当你刚开通一台新的公有云虚拟机或VPS时,在短短一小时内就看到大量的SSH日志报错,显示有IP在尝试使用root或常见用户名进行暴力破解登录,这是一个非常普遍且正常的现象。这些都是互联网上常年运行的自动化僵尸网络在进行端口扫描和攻击尝试。
问题的核心: 使用弱密码或常见密码进行SSH登录是非常危险的。虽然可以安装Fail2ban等工具来临时限制,但最根本、最安全的解决方案是彻底禁用密码登录,转而使用SSH密钥对进行身份验证。
本文将指导你如何快速安全地从密码登录切换到SSH密钥登录,实现VPS的初级安全强化。
步骤一:生成SSH密钥对 (在本地机器操作)
SSH密钥对由一个私钥(id_rsa,必须保密)和一个公钥(id_rsa.pub,可以公开)组成。你需要在本地电脑(Windows/Linux/Mac)上生成它们。
打开终端(在Windows上可以使用Git Bash或WSL):
ssh-keygen -t rsa -b 4096
说明:
* -t rsa: 指定加密类型为RSA。
* -b 4096: 指定密钥长度为4096位(增强安全性,默认通常是2048)。
系统会提示你选择保存位置(通常默认即可,如~/.ssh/id_rsa)和设置一个密码短语 (Passphrase)。强烈建议设置密码短语,这样即使私钥文件被盗,攻击者也需要知道该短语才能使用。
步骤二:将公钥部署到VPS (首次通过密码登录操作)
现在你需要将生成的公钥(id_rsa.pub)复制到VPS上的特定位置:~/.ssh/authorized_keys。
推荐方法:使用 ssh-copy-id
这是最简单的方法。它会自动连接到你的VPS,创建必要的目录,并正确设置权限。
# 替换 user 为你的用户名,your_vps_ip 为你的VPS IP地址
ssh-copy-id user@your_vps_ip
如果你的公钥不在默认位置,或者使用自定义端口:
ssh-copy-id -i ~/.ssh/my_custom_key.pub -p 2200 user@your_vps_ip
手动方法 (如果 ssh-copy-id 不可用)
如果你需要手动操作,可以先通过 SSH 密码登录 VPS,然后执行以下命令:
- 确保 .ssh 目录存在并设置权限:
mkdir -p ~/.ssh chmod 700 ~/.ssh - 将本地的公钥内容复制并粘贴到 VPS 上的 ~/.ssh/authorized_keys 文件中,并设置正确权限:
“`bash
在VPS上,使用nano或vi编辑
nano ~/.ssh/authorized_keys
(将本地id_rsa.pub文件的内容完整粘贴进去)
设置权限
chmod 600 ~/.ssh/authorized_keys
“`
步骤三:验证密钥登录并禁用密码登录 (在VPS操作)
重要:在禁用密码登录之前,请确保你的密钥登录是成功的!
3.1 验证密钥登录
在本地终端尝试使用密钥登录(此时系统应该要求输入你设置的密码短语,而不是VPS的系统密码):
ssh user@your_vps_ip
如果登录成功,你可以进入下一步。
3.2 禁用密码登录和Root登录
编辑 SSH 配置文件 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
找到并修改以下行(如果被注释,请取消注释):
# 禁用密码登录
PasswordAuthentication no
# 禁用root用户直接通过SSH登录 (强烈建议)
PermitRootLogin no
# 可选:修改默认端口 22,以减少日志中的暴力破解尝试
# Port 22000
保存文件并退出编辑器。
3.3 重启SSH服务
应用配置更改:
sudo systemctl restart sshd
# 或者对于旧系统:
# sudo service sshd restart
最终确认
完成以上步骤后,请务必从一个新的终端窗口再次尝试使用你的密钥登录。如果登录成功,你的VPS的SSH安全性已经大大提高。任何尝试使用密码或root用户进行暴力破解的行为都将被拒绝,日志也将清净许多。
汤不热吧