ansible在添加了ssh密钥之后还提示没有权限

记录一次使用ansible中的一个低级错误;哎,每个复杂怪异的问题背后,总有一个低级的愚蠢的错误引起的

问题

在执行了ssh-copy-id之后还是提示

[hai@centos1 ~]$ ansible mysql2 -m ping
mysql2 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true
}

答案

由于在执行了

ssh-copy-id root@192.168.41.130

这条命令之后,就去ansible的hosts文件中删除一些字段

#删除前
mysql2 ansible_host=192.168.41.130 ansible_port=22 ansible_user=root ansible_ssh_pass='123456'

#删除后
mysql2 ansible_host=192.168.41.130 ansible_port=22

#正确的
mysql2 ansible_host=192.168.41.130 ansible_user=root

这就导致ansible在对mysql2执行命令的时候,没有明确使用哪个用户登录,所以它就会使用当前用户登录,如果当前用户不是使用root登录,而是使用的sudo执行ansible命令的话,那就意味着当前用户是个普通用户,所以就会没有权限,因为把ssh密钥拷贝到mysql2的root用户下面了

上面的ansible_user=用户名这里的用户要对应ssh-copy-id 用户名@192.168.41.130的用户,把密钥拷贝到哪里就是写哪个用户,否则会报错

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据