我是ansible的新手,我正在努力实现它。我尝试了互联网上存在的所有可能方式以及与之相关的所有问题,但我仍然无法解决错误。请帮帮我。
我在Macbook上安装了ansible playbook。我创建了一个IP为10.4.1.141且主机IP为10.4.1.140
的VM我尝试使用主机通过ssh连接到我的VM,它通过以下命令连接:
ssh user@10.4.1.141
我获得了shell访问权限。这意味着我的ssh工作正常。
现在我为Ansible尝试了以下命令:
ansible all -m ping
/etc/ansible/host
中的内容为10.4.1.141
然后它显示以下错误:
10.4.1.141 | FAILED => SSH错误:权限被拒绝(公钥,密码)。
连接到10.4.1.141:22 使用-vvvv重新运行命令有时很有用,它会打印SSH调试输出以帮助诊断问题。
然后我尝试在主机上的config
文件夹中创建.ssh/
文件,但错误仍然相同。
config
文件的内容是:
IdentityFile ~/.ssh/id_rsa
这是我的私钥的路径。
然后我运行了相同的命令ansible all -m ping
,并再次犯了同样的错误。
当我尝试另一个命令时
ansible all -m ping -u user --ask-pass
然后它询问了SSH密码,我给了它(该死密码是否正确),但是我收到了这个错误:
10.4.1.141 | FAILED => FAILED:身份验证失败。
这是使用-vvvv
的日志:
<10.4.1.141> ESTABLISH CONNECTION FOR USER: rajatg
<10.4.1.141> REMOTE_MODULE ping
<10.4.1.141> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/rajatg/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 10.4.1.141 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007 && echo $HOME/.ansible/tmp/ansible-tmp-1445512455.7-116096114788007'
10.4.1.141 | FAILED => SSH Error: Permission denied (publickey,password).
while connecting to 10.4.1.141:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
我仍然无法弄清楚问题是什么。在完成我的所有研究后,这是我最后的选择。 This is the link I referred to
答案 0 :(得分:25)
我解决了这个问题。问题出在我的listview.setSelection(int position);
。
/etc/ansible/hosts
中写的内容是/etc/ansible/hosts
。但当我将其更改为10.4.1.141
时,问题就得到解决。
感谢大家的支持,并通过评论帮助我更清楚地解决问题。
答案 1 :(得分:3)
大多数问题是在主机中连接Ubuntu计算机时发生的。解决方案Ansible要求哪个用户要连接,因为Ubuntu没有默认的root用户。
用于主机文件
[Test-Web-Server]
10.192.168.10 ansible_ssh_pass = foo ansible_ssh_user = foo
答案 2 :(得分:2)
如果您使用ssh user@10.4.1.141
登录:
选项1
然后确保在etc\ansible
内的主机文件中具有:
[server01]
10.4.1.141
然后在etc\ansible
中运行:
ansible all -m ping -u user --ask-pass
选项2
如果要登录时不输入ssh password,则在etc\ansible
内的主机文件中添加:
[server01]
10.4.1.141 ansible_ssh_pass=xxx ansible_ssh_user=user
然后在etc\ansible
中运行:
ansible all -m ping
对我来说,它有两种作用。
答案 3 :(得分:1)
我也解决了这个问题。
我的问题也在我的主机文件/etc/ansible/hosts
我更改了我的主机文件
172.28.2.101
至
name-of-server-in-ssh-config
我在hosts文件中有IP。由于我已经为名称设置了SSH配置,因此我不需要在主机前使用变量或用户名。
[name-stg-web]
server-name-stg-web[01:02]
答案 4 :(得分:1)
如果你用sudo执行ansible,例如
sudo ansible -m ping all
请注意, root 的公钥必须位于您想要访问的服务器上,而不仅仅是来自非root用户的公钥。否则,您也会收到上面的错误消息。
答案 5 :(得分:0)
不幸的是,上述解决方案对我不起作用(DevOps外行在这里!)。 但是下面的一个对我有用。
将库存文件更改为:
[webserver]
10.4.1.141 ansible_user=ubuntu
可访问的网络服务器-私钥pem_file.pem -m ping
使用-vvvv命中命令可以帮助我对其进行更多调试。
答案 6 :(得分:0)
在/ etc / hosts文件中提及用户名也可以解决问题。
#sudo vim /etc/hosts
[test-server]
ip_address ansible_user="remote pc's username"
答案 7 :(得分:0)
问题出在库存文件中。
[网络服务器] 192。###。###。### ansible_ssh_user =用户ansible_ssh_pass = pass
我希望这会有所帮助!
答案 8 :(得分:0)
我的情况是我的.ssh中有多个私钥。
这是我通过告诉Ansible使用某个私钥来解决它的方法
ansible-playbook -i ../../inventory.ini --private-key=~/.ssh/id_rsa_ansiadmin update.yml
答案 9 :(得分:0)
首先对我有用的是在 /etc/ansible/hosts 中硬编码目标机器 root 的密码,如下所示:
[load_balancers_front]
loadbalancer1 ansible_host=xxx.xxx.xxx.xxx ansible_user=root ansible_password=root_password_in_target
但由于安全问题,当然不建议这样做。
然后,我从 docs 中找到了解决方案:
ssh-agent bash
--> 阅读 here
然后
ssh-add /my/private/ssh-key
此后,我的主机文件看起来像这样,ansible all -m ping
工作正常:
[load_balancers_front]
loadbalancer1 ansible_host=xxx.xxx.xxx.xxx ansible_user=root