遇到 `Permission denied` 应该先查什么?
先区分是“控制机本地权限”还是“目标机 SSH / sudo 权限”。
最常见的三类场景:
dbbotctl env setup失败,提示无法写入~/.bashrc、/usr/bin/sshpass或其他本地路径。- Ansible 连不上目标机,报
Permission denied (publickey,password)。 - 登录目标机后仍然没有权限写数据目录、安装包或 systemd 服务。
建议按这个顺序排查:
- 先在控制机直接执行:
ssh <user>@<target_ip>
如果这一步都失败,先修 SSH 账号、密码、密钥或 known_hosts。
- 再检查 inventory 中的:
ansible_useransible_ssh_pass- 是否需要
become
- 如果是控制机本地初始化失败,确认当前用户是否有权限:
- 修改自己的 shell 配置文件
- 在 Linux 上写入
/usr/bin/sshpass - 安装
python3、SELinux Python 绑定等依赖
- 如果是目标机目录权限不足,优先核对目标机是否应该使用
root,或是否已经正确配置 sudo / become。
补充建议:
- 不要一开始就把所有问题都归因于 Ansible。先用原生命令把 SSH 登录和目录写入验证通,再回到 Playbook。
- 如果服务因为前一次失败被 systemd 限流,可参考 启动失败过快(start request repeated too quickly) 先做
reset-failed。