SSH Error: Permission denied (publickey,password) in Ansible

SSH Error: Permission denied (publickey,password) in Ansible

我是 Ansible 的新手,我正在尝试实现它。我尝试了互联网上所有可能的方法以及与之相关的所有问题,但仍然无法解决错误。我该如何解决?

我在我的 MacBook Pro 上安装了 Ansible playbook。我创建了一个IP地址为10.4.1.141的VM,主机IP地址为10.4.1.140.

我尝试通过 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 Error: Permission denied (publickey,password).

while connecting to 10.4.1.141:22

有时使用 -vvvv 重新运行命令很有用,它会打印 SSH 调试输出以帮助诊断问题。

然后我尝试在主机上的 .ssh/ 文件夹中创建 config 文件,但错误仍然存​​在。

config文件的内容是:

  IdentityFile ~/.ssh/id_rsa

这是我私钥的路径。

然后我运行同样的命令ansible all -m ping又得到了同样的错误。

当我尝试另一个命令时,

ansible all -m ping -u user --ask-pass

然后它要求输入 SSH 密码。我给了(我很确定密码是正确的),但是我得到了这个错误:

10.4.1.141 | FAILED => FAILED: Authentication 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.

我解决了这个问题。问题出在我的 /etc/ansible/hosts 文件中。

/etc/ansible/hosts中写入的内容为10.4.1.141。但是当我将其更改为 rajat@10.4.1.141 时,问题得到解决。

我也解决了这个问题。

我的问题也出现在我的主机文件中,/etc/ansible/hosts

我更改了主机文件

172.28.2.101

name-of-server-in-ssh-config

我在主机文件中有 IP 地址。由于我已经为名称设置了 SSH 配置,因此我不需要在主机前使用变量或用户名。

[name-stg-web]
server-name-stg-web[01:02]

如果你用 sudo 执行 Ansible,例如

sudo ansible -m ping all

请记住,root 的 public 密钥也必须在您要访问的服务器上,而不仅仅是 public来自您的非根用户的密钥。否则,您也会收到上面的错误消息。

大多数问题发生在主机中连接 Ubuntu 台机器时。

解决方案 Ansible required which user want to connect, because Ubuntu doesn't have a default root user.

对于主机文件

[测试网络服务器]

10.192.168.10 ansible_ssh_pass=foo ansible_ssh_user=foo

如果您使用 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 密码的情况下登录,请在 etc\ansible 内的主机文件中添加:

[server01]
10.4.1.141 ansible_ssh_pass=xxx ansible_ssh_user=user

然后 etc\ansible 运行:

ansible all -m ping

对我来说它是双向的。

不幸的是,以前的解决方案对我不起作用(DevOps 外行!)。

但下面的那个对我有用。

将您的库存文件更改为:

[webserver] 10.4.1.141 ansible_user=ubuntu

ansible webserver --private-key pem_file.pem -m ping

使用 -vvvv 命令帮助我调试它。

参考:Failed to connect to the host via ssh: Permission denied (publickey,password) #19584

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

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

问题出在库存文件上。

vi /etc/ansible/hosts

应该是:

[webserver]
192.###.###.### ansible_ssh_user=user ansible_ssh_pass=pass

我的情况是我的 .ssh 中有多个私钥。

这是我通过告诉 ansible 使用某个私钥来修复它的方法

ansible-playbook -i ../../inventory.ini --private-key=~/.ssh/id_rsa_ansiadmin update.yml 

首先对我有用的是在 /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

[詹金斯服务器] publicdnsname ansible_user=ubuntu private_key=ubuntu.cer