【问题标题】:Error: Failed to connect to the host via ssh错误:无法通过 ssh 连接到主机
【发布时间】:2016-07-15 00:13:12
【问题描述】:

我正在努力学习 ansible,并正在关注 o'riley Ansible Up and running book。

在本书的入门部分,它要求我安装 ansible、virtualbox 和 vagrant,然后通过 CLI 运行:

vagrant init ubuntu/trusty64

vagrant up

之后我可以通过 vagrant ssh 或通过以下方式 ssh 进入虚拟机:

ssh vagrant@127.0.0.1 -p 2222 -i /Users/XXX/playbooks/.vagrant/machines/default/virtualbox/private_key

接下来是创建主机文件,如下所示:

testserver ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 \ ansible_ssh_user=vagrant \ ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key

最后是运行这个命令:

ansible testserver -i hosts -m ping

这让我很感动:

testserver | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

添加 -vvv 让我明白:

No config file found; using defaults
<127.0.0.1> ESTABLISH SSH CONNECTION FOR USER: None
<127.0.0.1> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o Port=2222 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/Users/XXX/.ansible/cp/ansible-ssh-%h-%p-%r 127.0.0.1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1468541275.7-255802522359895 `" && echo ansible-tmp-1468541275.7-255802522359895="` echo $HOME/.ansible/tmp/ansible-tmp-1468541275.7-255802522359895 `" ) && sleep 0'"'"''
testserver | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

我尝试修改 hosts 文件中的 ansible_ssh_private_key_file 以指向私钥的完整路径,但还是不行:

ansible testserver -i hosts -m ping -vvv
No config file found; using defaults
<127.0.0.1> ESTABLISH SSH CONNECTION FOR USER: None
<127.0.0.1> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o Port=2222 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/Users/XXX/.ansible/cp/ansible-ssh-%h-%p-%r 127.0.0.1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1468541370.61-137685863794569 `" && echo ansible-tmp-1468541370.61-137685863794569="` echo $HOME/.ansible/tmp/ansible-tmp-1468541370.61-137685863794569 `" ) && sleep 0'"'"''
testserver | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

这是我的 Ansible 版本:

ansible --version ansible 2.1.0.0 配置文件 = 配置的模块搜索路径 = 默认无覆盖

有人知道为什么 ansible 没有连接到我的流浪虚拟机吗?

【问题讨论】:

  • 如果您需要帮助,您需要通过格式化来清理您的问题。
  • ctrl-k 为您突出显示代码。
  • 非常感谢 Rob 帮助编辑!!!我还不习惯使用 SO 编辑器。

标签: vagrant ansible


【解决方案1】:

我没有看到您的任何库存变量超过第一个在 ssh 命令中生效的变量。你的库存文件真的像这样吗?

testserver ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 \ ansible_ssh_user=vagrant \ ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key

您不应该在其中使用反斜杠。直接重新格式化是

testserver ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222  ansible_ssh_user=vagrant  ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key

但是,从长远来看,您可能想要split these out into separate host_vars files。

【讨论】:

  • 这就是问题所在。这也在书中,但我完全只是浏览了一下并复制/粘贴了代码。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2017-08-08
  • 2017-02-08
  • 2018-07-22
  • 2019-08-27
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多