
为什么 SSH 默认配置不适合长期裸奔
新买回来的 搬瓦工 VPS,KiwiVM 面板会直接给出 IP、SSH 端口和 root 密码。多数时候端口就是 22,密码是面板自动生成的一长串。这套配置能用,但 22 端口是全网扫描脚本的重点照顾对象,机器挂得越久,日志里的暴力尝试就越多。
不过话说回来,并不是每台机器都必须立刻做全套加固。如果你只是临时开一台 VPS 跑个脚本,密码本身就足够复杂,不改也暂时不会出事。真正值得花时间做的,是那种要长期跑网站、数据库,或者对外开放服务的机器。这篇文章按操作顺序讲三件事:改高位端口 → 启用密钥登录 → 禁用密码登录。每完成一步,先验证再进下一步,不要一口气全改完然后重启。
文中命令以 Debian/Ubuntu 系为例,CentOS/AlmaLinux 大体一致。不同发行版的 sshd 配置路径和包管理器有区别,遇到报错时先看系统提示,别照搬某一套就以为通吃。
动手前先确认:登录信息在 KiwiVM 哪里

KiwiVM 面板主页能看到三样东西:IP 地址、SSH 端口、root 密码。刚买机器还不太会进后台的话,可以先看这篇 如何从官网后台登录 KiwiVM 管理面板。
第一次 SSH 连接时,终端会问是否信任主机指纹,输入 yes 回车。接着输密码时,屏幕不会有任何显示,这是正常的,粘贴完直接回车即可。很多人第一次用 SSH 以为卡住了,其实密码已经输入进去了。
开始改之前,先对照检查这几点:
- 已经能正常 SSH 登录,并且知道 root 密码;
- 大概知道系统是 Debian/Ubuntu 还是 CentOS 系;
- 本机能打开 Terminal 或 PowerShell;
- KiwiVM 面板能登录;
- 已经有一个 SSH 窗口连在上面,这个窗口别关。
最后一条最关键。改配置时始终留一个已连接的 SSH 窗口不要关,万一改错了,还能用它救回来。
第一步:把 SSH 端口改成高位端口

先连上 VPS,编辑 sshd 配置:
sudo nano /etc/ssh/sshd_config
找到 Port 那一行,很多系统里这行会被 # 注释掉,注释状态实际用的就是默认 22。把它改成你想要的高位端口:
Port 23456
端口范围是 1-65535,建议选 10000 以上的高位端口,避开常见扫描范围。也不要挑太明显、或者已经被业务占用的端口。用 nano 的话,按 Ctrl+O 保存,Ctrl+X 退出;用 vim 就按 Esc,输入 :wq 回车保存。
改完先别急着重启 SSH。这一步顺序最容易出事:如果系统开了防火墙,却没有放行新端口,重启 SSH 后就连不上了。所以先确认防火墙状态:
## 如果用了 UFW
sudo ufw allow 23456/tcp
sudo ufw status
## 如果用了 firewalld
sudo firewall-cmd --permanent --add-port=23456/tcp
sudo firewall-cmd --reload
然后重新加载 sshd:
sudo systemctl reload sshd
reload 比 restart 温和,不会中断已有连接。如果某些旧系统不支持 reload,再考虑 restart。
验证方法很简单:不要关掉当前窗口,另开一个终端用新端口连接:
ssh -p 23456 root@你的服务器IP
新窗口能连上,才说明改成功了,确认无误后再关旧窗口。如果新窗口连不上,先查 sshd 是否在监听新端口:
ss -tlnp | grep sshd
看不到新端口,就说明配置没生效或者 sshd 没重新加载。
第二步:生成密钥并启用密钥登录
SSH 密钥比密码安全得多,密钥本身是一段几百位的随机内容,暴力破解基本不现实。在你自己电脑上执行,不是在 VPS 上:
ssh-keygen -t ed25519 -C "用于登录搬瓦工 VPS"
一路回车即可。如果系统比较旧,不支持 ed25519,可以退一步用:
ssh-keygen -t rsa -b 4096
生成后,把公钥传到 VPS。macOS 和 Linux 可以这样:
ssh-copy-id -p 23456 root@你的服务器IP
Windows 的 PowerShell 通常没有 ssh-copy-id,需要手动来。先在本地看公钥内容:
type $env:USERPROFILE\.ssh\id_ed25519.pub
macOS/Linux 则是:
cat ~/.ssh/id_ed25519.pub
复制输出的整行,然后在 VPS 上执行:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "粘贴你复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
验证方式还是老规矩:另开一个终端,用密钥登录试试。能直接进去,或者提示输入密钥 passphrase,就说明密钥已经生效。这一步同样不关旧窗口。
第三步:确认密钥可用后,再禁用密码登录
回到 VPS,再次编辑 sshd 配置:
sudo nano /etc/ssh/sshd_config
找到并修改这几项,没有就自己加上:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
Port |
23456 | 保持上一步的高位端口 |
PubkeyAuthentication |
yes | 允许公钥登录 |
PasswordAuthentication |
no | 禁止密码登录 |
ChallengeResponseAuthentication |
no | 避免走交互式密码认证 |
PermitRootLogin |
prohibit-password | root 只能用密钥,不能用密码 |
保存后重新加载:
sudo systemctl reload sshd
仍然是老规矩:保持当前窗口不关,另开一个终端验证能不能用密钥进去。确认没问题,这套加固才算完成。做完这三步,SSH 层面的防护基本到位了。
如果你有多个设备要登录,每台电脑可以生成自己的密钥对,把各自的公钥都追加到 VPS 的 ~/.ssh/authorized_keys 里,一行一个。不要只留一台设备的密钥,否则那台设备丢了或重装,你就只能靠 Root Shell 恢复了。
用 KiwiVM 的 SSH Keys 页面省事
搬瓦工 KiwiVM 后台有个 SSH Keys 管理页面,可以把公钥提前存进去。好处是:以后每次重装系统,这个公钥会被自动写进新系统,不用重新配一遍。经常重装系统折腾的人,建议先把公钥存到这里。
注意,这个功能只是把公钥预置到新系统,并不会自动帮你禁用密码登录。重装完之后,还是需要手动做第三步,或者自己写一个初始化脚本。
改完连不上怎么办:排障与回滚
真锁在外面也别慌,先想一下手里还剩什么通道。
- 如果还有一个旧 SSH 窗口连着,直接在里面把
/etc/ssh/sshd_config改回去,再 reload。 - 如果所有窗口都断了,KiwiVM 面板自带 Root Shell,不依赖 SSH,是最后的救命通道。在面板左侧菜单能找到入口,进系统把配置改回来即可,详细用法可以看 搬瓦工 KiwiVM 面板 Root shell 远程终端功能详解与使用指南。
- 如果能 ping 通但 SSH 连不上,可能是端口被墙或者防火墙规则有问题,可以对照 搬瓦工 IP 封锁与端口拦截自测指南 从本地到官方网页终端逐步排查。
常见原因无非这几种:防火墙没放行新端口、sshd 没重新加载、端口被运营商封锁、写错了端口号。改配置前把原值记下来,恢复会快很多。
常见问题
Q:搬瓦工的 SSH 端口默认是 22 吗?
A:通常是,但不要凭印象,以 KiwiVM 面板首页显示的端口为准。不同套餐或重装系统后可能有差异。
Q:禁用密码登录后,还能用密码救急吗?
A:不能。所以一定要先确认密钥登录成功,再关密码。如果实在不放心,可以先只改端口、配好密钥,但密码暂缓关闭,等跑几天稳定后再关。
Q:改了端口,之前的脚本和工具要改吗?
A:要。所有连这台机器的地方都要带上新端口,包括 SFTP 工具、备份脚本、监控工具、CI/CD 配置。漏掉任何一个,都会出现“服务正常但连不上”的假故障。
总结:按顺序做,别跳步
SSH 加固记住一句话:先改端口、再配密钥、最后关密码,每一步都另开窗口验证过再进行下一步。真锁在外面了也别慌,KiwiVM 的 Root Shell 能救回来。
适合谁:长期跑网站、数据库、对外开放服务的搬瓦工用户。不适合谁:只是临时测试、机器用完就删,或者密码已经足够随机、也不介意扫描日志的人。这种情况下,可以先只改端口,不必急着把密码登录直接关掉。
如果你还没有搬瓦工机器,可以从 搬瓦工 套餐页选择适合自己的方案,新机器到手后按上面顺序做一遍就行。套餐价格和机房库存会随活动变化,下单前以官网为准。