SSH security

搬瓦工 VPS 安全设置:用密钥登录,关掉密码登录

VPS 一开机就会被全网扫描。本站测试机约 8 天的 SSH 日志里,有 5480 次密码登录失败,来自 255 个不同 IP。最有效的防护是改用 SSH 密钥登录并关闭密码登录,再给 KiwiVM 开两步验证。

测试机真实日志 Windows / Mac 通用 含被锁后的恢复办法

Steps

安全设置 6 步

前三步在服务器上做,后三步在 KiwiVM 面板里做。

  1. 生成密钥
  2. 放好公钥
  3. 关闭密码登录
  4. 两步验证
  5. 审计日志
  6. API 密钥
1

在自己电脑上生成密钥

Windows 10/11 的 PowerShell 和 macOS 的终端都自带 SSH 工具。执行下面这行,一路回车即可(中间可以设一个密钥密码,也可以留空):

ssh-keygen -t ed25519

会生成两个文件:id_ed25519 是私钥,留在自己电脑上;id_ed25519.pub 是公钥,下一步放到服务器上。查看公钥内容:

cat ~/.ssh/id_ed25519.pub                    # macOS
type $env:USERPROFILE\.ssh\id_ed25519.pub     # Windows PowerShell

注意私钥 id_ed25519(不带 .pub 的那个)等于服务器的钥匙,不要发给任何人,也不要上传到网盘或群里。

2

把公钥放到服务器上

macOS 一行命令就能放好,把 IP 和端口换成你的:

ssh-copy-id -p 端口 root@你的IP

Windows 没有 ssh-copy-id,在 PowerShell 里执行这一行,输入一次 root 密码即可:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 端口 root@你的IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

放好以后新开一个终端窗口执行 ssh -p 端口 root@你的IP,不再问 root 密码就成功了(设了密钥密码的会问密钥密码)。

另外建议把公钥也保存到 KiwiVM 的 SSH keys 页,以后重装系统会自动写入:

KiwiVM SSH keys 页,标出公钥输入框和保存按钮
KiwiVM:SSH keys
  1. 1把公钥内容粘到这里
  2. 2点 Save SSH keys 保存

正常结果保存后页面显示 Great Success!,并说明之后重装系统时这些公钥会自动加到 /root/.ssh/authorized_keys。当前系统用上面的命令放好即可。

3

关闭密码登录

本站测试机重装系统后开机不到 1 分钟,日志里就出现了第一次 root 密码猜测,所以这一步越早做越好。确认密钥能登录后,再关掉密码登录。保持当前窗口不要关,登录服务器执行:

cat > /etc/ssh/sshd_config.d/00-key-only.conf <<'EOF'
PasswordAuthentication no
PermitRootLogin prohibit-password
EOF
sshd -t

sshd -t 没有任何输出说明配置没写错,再重新加载 SSH 服务:

systemctl reload sshd     # AlmaLinux / Rocky / CentOS
systemctl reload ssh      # Debian / Ubuntu

检查是否生效:

sshd -T | grep -E "passwordauthentication|permitrootlogin"

正常结果显示 passwordauthentication no 和 permitrootlogin without-password 就生效了。新开窗口用密钥登录一次,没问题再关掉旧窗口。

文件名用 00 开头,是因为 SSH 配置以最先读到的值为准,要排在系统自带的配置文件前面(本站测试机的 AlmaLinux 9 自带 50-redhat.conf)。执行 grep -n Include /etc/ssh/sshd_config 没有任何输出的老系统(例如 CentOS 7),直接改 /etc/ssh/sshd_config 里的 PasswordAuthentication 为 no。

注意万一把自己锁在外面:用 KiwiVM 左侧 Root shell – basic 网页终端执行 rm /etc/ssh/sshd_config.d/00-key-only.conf,再重新加载 SSH 服务即可。

4

KiwiVM 开启两步验证

服务器之外,KiwiVM 面板本身也要保护。左侧 Security & Records 下点 Two-factor authentication,用手机上的验证器 App 扫码开启;也可以用 Passkeys and Security keys 绑定通行密钥或硬件密钥。

注意KiwiVM 页面明确提醒:手机和备用码都丢了,唯一的重置办法是彻底清空这台 VPS,数据全部删除。开启时一定把备用码另外保存好。

5

定期看审计日志

左侧 Audit log 记录每次登录 KiwiVM 和通过 API 执行的操作:

KiwiVM Audit log 审计日志,时间、来源 IP 和邮箱已遮盖
KiwiVM:Audit log(时间、来源 IP、邮箱已打码)
  1. 1每条记录有时间、来源 IP 和操作内容

Billing platform requested a single-use login token 是从客户区点 Open KiwiVM 时自动产生的,属于正常记录。看到不认识的 IP 登录,马上改客户区密码,并按下一步重置 API 密钥。

6

保管好 API 密钥

KiwiVM 左侧 API 页的密钥可以直接重装、关机、在服务器上执行命令。不要发给别人,不要贴到群里或截图里。

KiwiVM API 页面,标出 Reset API Key 按钮
KiwiVM:API(VEID 已打码)
  1. 1怀疑密钥泄露,点 Reset API Key 重新生成密钥

FAQ

安全设置常见问题

搬瓦工安全吗?

服务器安不安全主要看自己的设置。用密钥登录、关掉密码登录、给 KiwiVM 开两步验证、不泄露 API 密钥,就能挡住绝大多数自动化攻击。

关掉密码登录后把自己锁在外面了怎么办?

用 KiwiVM 的 Root shell – basic 网页终端执行 rm /etc/ssh/sshd_config.d/00-key-only.conf,再执行 systemctl reload sshd(Debian / Ubuntu 用 systemctl reload ssh)即可恢复密码登录。

改 SSH 端口有用吗?

能减少日志里的扫描记录,但不能代替密钥登录。改端口还要同时处理防火墙和 SELinux,新手不建议先动。

要不要开防火墙?

本站测试机的 AlmaLinux 9 模板默认没有装 firewalld。要开的话一定先放行 SSH 端口,否则会把自己锁在外面;被锁时的排查见 防火墙问题。

QQ group

照着教程做卡住了?到 QQ 群里问

群里有补货提醒,也可以把报错截图发上来一起看。提问时请先把 IP、密码等信息打码。

QQ群:433051101 补货提醒 教程答疑
搬瓦工 VPS 补货与教程交流群二维码
扫码加入 QQ 群