Ansible 权限问题

3
我在论坛上看到过很多类似的问题,但是没有一个答案能帮到我。
我正在尝试运行ansible playbook,在我的Debian PC上这个操作很顺利。现在我已经转移到Ubuntu 16.04上,却无法正常工作。我遇到了public key错误的权限被拒绝的问题。
我猜测这是因为我在运行sudo ansible-playbook。这会尝试使用来自我的root用户的公钥,而这些公钥不在我正在尝试ansible的服务器上。
那么,我怎样才能以sudo身份运行ansible playbook,但同时又使用我当前用户的ssh密钥呢?
如果我以sudo身份运行,我会得到:
fatal: [10.11.8.1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey).\r\n", "unreachable": true}

如果我不以sudo身份运行,会出现以下错误:

fatal: [10.11.8.1]: FAILED! => {"failed": true, "msg": "Cannot write to ControlPath /home/chrisl/.ansible/cp"}

[警告]: 无法创建重试文件'/home/chrisl/ansible/keys.retry'。[Errno 13] 权限被拒绝:u'/home/chrisl/ansible/keys.retry'

我也尝试过这个方法,你可以看到发生了什么...

带有错误的图片


在第二个示例中,似乎您的“chrisl”用户帐户无法完全读取/写入/更新“/home/chrisl/ansible/keys.retry”文件。您能否确认您的“chrisl”帐户可以查看/读取/写入该文件?我认为这与您的问题并不直接相关,但它可能会在以后产生影响。 - dan_linder
1
这真的是Ansible的问题吗?你的chris账户显然存在一些权限问题。你可能想尝试使用sudo的-H标志。 - Kyslik
1个回答

3
在以root用户身份运行第一个命令ansible-playbook后,您需要注意的是,这个操作在用户chris下的home文件夹中创建了属于root用户的文件。如果接下来作为用户chris执行该命令,将无法修改属于root用户的文件。解决方法如下:
  • 确定您要/需要在此处使用哪种ssh方法- ssh-agent或无密码的默认ssh密钥,因为第一个命令由于密钥问题而失败。如果没有密码,也可以传递参数--private-key=/path/to/key
  • 修复:以root用户身份使/home/chris目录下的所有文件都属于用户chris及其默认组:sudo chown -R chris:chris /home/chris
  • 如果数据量很大,以上命令可能需要一些时间。
  • 从特定的、相同的用户运行您的playbooks,并且不要混合使用。如果你正在混合使用,请学习如何正确使用。
  • 学习/阅读/实验unix权限、身份切换、环境等知识,因为这不是“ansible权限”问题,而是“chris理解unix权限”的问题,这是可以理解的,毕竟您才刚开始接触unix/linux。
祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接