甲骨文免费VPS默认只允许opc用户登录,这种方式在大多数场景下是够用的。但如果你有定时任务需要root权限、或者想省去每次sudo输密码的麻烦,开启root密码登录也算是一个常见需求。不过,动手前要清楚一件事:把root明文密码暴露在SSH登录通道上,会直接增加被扫描和暴力破解的风险。所以接下来的每一步,都要围绕“先确认身份、再改配置、最后验证和回滚”来走。
先确认当前登录身份和系统版本
甲骨文免费VPS默认使用名为opc的非root用户登录,该用户拥有sudo权限。在修改root密码登录之前,需要先确认当前登录用户是否为opc,并验证sudo是否可用。执行whoami命令应显示opc,执行sudo -l应能列出允许的命令。同时要注意系统版本是Oracle Linux还是Ubuntu,两者在sshd配置和用户管理上略有差异,后续操作需基于实际系统进行。
这一步看起来多余,但能避免你把配置改错位置。如果sudo -l报错,说明opc的sudo权限有问题,那后续所有命令都无法获得管理员权限,得先修复sudo配置。另外,用cat /etc/os-release可以查看系统类型,确认是Oracle Linux还是Ubuntu,因为后面重启服务时用到的服务名不一样。
设置root密码并备份配置
首先为root设置一个强密码,在SSH终端中执行sudo passwd root,按提示输入两次新密码。密码建议至少12位,包含大小写字母、数字和特殊字符。随后备份sshd配置文件,执行sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,再使用sudo vi或sed修改配置。需要重点修改或添加以下几项:PermitRootLogin yes、PasswordAuthentication yes、ChallengeResponseAuthentication no,同时确保PubkeyAuthentication保留为yes以免影响密钥登录。
备份文件是回滚的前提。万一改坏了,用cp回去就能恢复。密码强度这里别偷懒,很多暴力破解工具就是盯着root账户扫弱密码的。如果此前root没有密码,passwd命令会直接激活;如果已经有密码,它会提示先输入旧密码再设新密码。
修改sshd_config时注意覆盖和语法
使用sed修改比vi更适合脚本化,但要注意重复配置覆盖问题。比如文件里原本有PermitRootLogin no,后面又加一行yes,最终生效的是最后一行。建议先删除所有相关行,再统一添加。可以执行下面的命令完成修改:
sudo sed -i '/^[#]*PermitRootLogin/d' /etc/ssh/sshd_config
sudo sed -i '/^[#]*PasswordAuthentication/d' /etc/ssh/sshd_config
sudo sed -i '/^[#]*PubkeyAuthentication/d' /etc/ssh/sshd_config
sudo sed -i '/^[#]*ChallengeResponseAuthentication/d' /etc/ssh/sshd_config删除之后,再用echo追加新的配置:
echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' | sudo tee -a /etc/ssh/sshd_config
echo 'PubkeyAuthentication yes' | sudo tee -a /etc/ssh/sshd_config
echo 'ChallengeResponseAuthentication no' | sudo tee -a /etc/ssh/sshd_config这样唯一生效项就是这些新行。注意PubkeyAuthentication保留为yes,避免密钥登录被误关。修改完后,可以先用grep检查最终结果:grep -E 'PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|ChallengeResponseAuthentication' /etc/ssh/sshd_config。
重启服务并用新会话验证
修改完sshd_config后,务必先检查配置语法是否正确,执行sudo sshd -t,如果无输出说明语法无误。然后重启sshd服务,Oracle Linux执行sudo systemctl restart sshd,Ubuntu执行sudo systemctl restart ssh。重启后不要立即断开当前连接,而是另开一个SSH会话尝试用root密码登录。如果登录失败,可以查看服务日志,Oracle Linux用sudo journalctl -u sshd,Ubuntu用sudo journalctl -u ssh,以便定位问题。
先保留一个已建立的会话,是防止新会话进不来时还有退路。日志里如果出现Permission denied,多半是密码或配置问题;如果出现Connection refused,则可能是服务没起来或防火墙拦截。另外,要确保22端口没被防火墙和安全列表限制,Oracle Cloud控制台的“安全列表”也必须放通源IP。
常见坑和风险控制
常见的坑不止一个。忘记重启服务是最低级的错误,改完配置不重启等于没改。第二个坑是SELinux,某些Oracle Linux镜像默认enforcing会阻止root直接登录,你可以临时执行sudo setenforce 0测试,如果这样就正常了,说明需要调整SELinux策略,而不是直接禁用它。第三个坑是Ubuntu镜像可能默认没有激活root账户,必须先passwd root。还有,sshd_config的配置项可能被注释,或者存在多行,我们前面已经用sed处理了。
风险方面,开启root密码登录后,VPS被暴力破解的窗口会变大。保守的做法是限制来源IP,比如在sshd_config里加一行AllowUsers root@你的IP,同时配合Oracle Cloud安全列表只放行该IP。如果只是临时需要,建议用完就恢复:把PermitRootLogin改回no,重启sshd。长期使用密钥登录,密码登录能不开就不开。
整体流程并不复杂,按“先确认、再修改、后验证”的顺序走一遍,即使出错也能通过备份恢复。记得把备份文件留在系统里,下次排查时能帮上忙。