拿到第一台VPS,最应该做的是这些…
这里强烈建议各位新手小白,一定不要偷懒,以为商家的面板绝对安全!通常将秘钥掌握在自己手中,才是绝对的安全!!!很多厂商都是默认root账号密码登录,例如:VMISS,berohost等等。
特别提醒:一定要备份生成后的秘钥,避免本地电脑重装导致秘钥丢失
接下来我会从拿到开机邮件一直到SSH秘钥登录成功结束,详细的操作流程
1. 当然是重装系统
如果你觉得商家提供的系统不安全不纯净,害怕对方留了后门,可以自行重装,但一定要对方使用规则允许的前提下,切勿触犯规则导致小鸡被强行停机!
2. 生成SSH秘钥
其实每个商家都在面板提供了SSH秘钥的功能,但如果是面板泄露的问题,那么SSH秘钥很有可能也会泄露,所以为了将安全掌握在自己手上,这里咱们就在本地电脑上生成自己的秘钥,更可以一套秘钥用在其他VPS上!
- 在本地windows电脑上执行命令生成SSH秘钥
# 在本地电脑生成秘钥
ssh-keygen -t ed25519 -C "秘钥备注"
# (linux或mac)自动写入公钥并配置好权限
# 使用 ssh-copy-id 自动写入公钥并配置好权限(需输入最后一次 root 密码)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的服务器IP
# (windows)
type .ssh\id_ed25519.pub | ssh root@你的服务器IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
# 手动操作
ssh-keygen -t ed25519 -C "秘钥备注"
# 如果你之前生成过秘钥
dir .ssh\*.pub
## 打印并查看公钥内容 通常是 id_ed25519.pub 或 id_rsa.pub
type .ssh\id_ed25519.pub
# 将打印出来的秘钥串复制,然后在服务器上执行
mkdir -p ~/.ssh
echo "这里粘贴你复制的ssh-ed25519开头的完整公钥" >> ~/.ssh/authorized_keys
chmod 700 /root ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Q: 这个原因是windows自带没有命令,可以选择下面的type…一步到位!
Q: 这里意味着传输完成并且成功登录到了服务器
注意:如果已经修改过SSH端口,那么需要在IP 后面 或者 前面加上 -p SSH对应的端口
2.不要急着关闭密码登录,测试免登录
- 测试免登录
# 如果是默认端口 执行命令:
ssh root@你的服务器IP
# 如果是非默认端口执行命令:
ssh -p 22022 root@服务器ip
如果你前面的操作正常,是不会要输入密码的,但这里有可能会提示要输入密码,原因是服务器关闭了SSH秘钥登录
- 解决办法
# 在服务器上执行命令
sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config.d/*.conf 2>/dev/null
systemctl restart ssh || systemctl restart sshd
# 执行完毕之后,CMD窗口输入免登录命令,就能正常连接了
Q: 这里就意味着执行完成!
- 第二个办法:直接操作服务器配置文件
sudo nano /etc/ssh/sshd_config
# 找到并确保以下配置项处于取消注释(去掉开头的 #)且值如下的状态:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
PasswordAuthentication no 是全局关闭所有账号的密码登录;PermitRootLogin prohibit-password 代表允许root的SSH秘钥登录
注意:Ubuntu 22.04/24.04 或部分云服务器镜像会在/etc/ssh/sshd_config.d下存放额外的配置,建议运行 grep -rn "PasswordAuthentication" /etc/ssh/sshd_config.d/ 检查并同意修改为 no
- 配置完成之后
# 检查配置文件语法是否正确(无输出即为正常)
sudo sshd -t
# 重启 SSH 服务(Debian/Ubuntu 通常为 ssh,CentOS/RHEL/Rocky 通常为 sshd)
sudo systemctl restart ssh || sudo systemctl restart sshd
- 接下来验证登录
- 运行
ssh root@你的服务器IP此时不需要输入密码 - 运行
ssh -o PubkeyAuthentication=no root@你的服务器IP此时系统会直接拒绝
至此SSH秘钥登录,以及禁止root用户账号密码登录全部完成!
3.额外 部署安装fail2ban 自动封禁IP
正常情况下,如果修改为了SSH秘钥登录,默认的22端口已经非常安全!但避免不了公网上暴力扫描,如果希望彻底安静,可以选择安装fail2ban封禁IP
# Ubuntu / Debian 安装并启动
sudo apt update && sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
默认情况下fail2ban会自动启动对SSH的基础保护,如果你的事Debian13,建议再生成一个本地配置文件
cat << 'EOF' > /etc/fail2ban/jail.local
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
backend = systemd
[sshd]
enabled = true
mode = aggressive
EOF
# 重启 Fail2ban 并查看当前拦截状态
systemctl restart fail2ban
fail2ban-client status sshd
不过很多成熟的厂商都会默认秘钥登录,而禁止root账户密码登录,例如: DMIT;其实条件允许的情况下,选择大厂是明智的选择,在解决问题和处理问题上更加的迅速有效!当然小厂是性价比的最佳选择,如果不遇到问题,那是万幸中的大幸!!!!