SSH错误:Ansible

时间:2015-10-22 11:45:20

标签: ssh ansible

我是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

10 个答案:

答案 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.101name-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命中命令可以帮助我对其进行更多调试。

参考:https://github.com/ansible/ansible/issues/19584

答案 6 :(得分:0)

在/ etc / hosts文件中提及用户名也可以解决问题。

#sudo vim /etc/hosts
[test-server]
ip_address ansible_user="remote pc's username" 

答案 7 :(得分:0)

问题出在库存文件中。

vi / etc / ansible / hosts

[网络服务器] 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