Appearance
sudo 与 su 的区别及 root 登录方式
- 状态:已验证
- 来源:对话整理
- 更新时间:2026-03-22
关键结论
sudo -是错误用法,因为-不是命令。- 切换到 root 登录环境时,推荐使用
sudo -i。 sudo su -也可以切换到 root 的登录 shell,但链路更长。- 云服务器默认通常禁止 root 直接 SSH 登录,应优先通过普通用户登录后再用
sudo提权。 sudo su不会加载 root 的登录环境,不推荐作为默认写法。
详细分析
sudo的基本语法是sudo [command],它的作用是以 root 或其他授权身份执行后面的命令。- 因此
sudo -会被理解为“执行名为-的命令”,自然会报command not found。 sudo -i会:- 切换为 root 用户
- 加载 root 的登录环境
- 读取 root 的登录相关初始化文件
sudo su -的执行链路更长:- 先通过
sudo提权 - 再通过
su -切换为 root 的登录 shell
- 先通过
sudo su只完成提权和 shell 切换,但不加载登录环境,因此环境变量、路径和初始化行为可能与预期不同。- 在 Ubuntu LTS 这类云镜像中,默认普通用户通常已经被授予
sudo权限,而 root:- 往往没有可直接登录的密码
- 往往被禁止通过 SSH 直接登录
- 这类设计的核心目的,是把“日常登录”与“高权限操作”分离,降低误操作和暴露面。
- 如果确实需要 root SSH 登录,通常要同时满足:
- 为 root 设置密码
- 修改 SSH 配置允许 root 登录
- 重启 SSH 服务
- 但生产环境通常不建议这么做,尤其不建议开放 root 密码登录。
可执行步骤
- 使用普通用户登录服务器:
bash
ssh ubuntu@<server-ip>- 切换到 root 登录环境:
bash
sudo -i- 验证当前身份:
bash
whoami- 如果只是想以 root 身份执行单条命令,也可以直接使用:
bash
sudo <command>- 如果确实需要 root 直接 SSH 登录,先启用 root 密码:
bash
sudo passwd root- 编辑 SSH 配置:
bash
sudoedit /etc/ssh/sshd_config- 修改配置项:
txt
PermitRootLogin yes- 重启 SSH 服务:
bash
sudo systemctl restart ssh命令 / 配置 / 代码
bash
# 推荐:进入 root 登录环境
sudo -i
# 也可:先 sudo 再切换 root 登录 shell
sudo su -
# 错误示例
sudo -
# 查看当前身份
whoami
# 启用 root 密码(不推荐用于生产环境)
sudo passwd root
# SSH 配置
sudoedit /etc/ssh/sshd_config
PermitRootLogin yes
# 重启 SSH
sudo systemctl restart ssh风险与注意事项
- 启用 root SSH 登录会显著降低安全性。
- 不要在生产环境开放 root 密码登录。
- 优先使用普通用户登录 +
sudo提权 + SSH key 登录的组合。 sudo su -可以工作,但通常不如sudo -i简洁直接。sudo su不加载登录环境,容易造成路径和环境变量差异,日常不推荐。
关联条目
- SSH 登录与密钥认证相关内容在私有知识库中继续维护,公开版未收录。