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