通过Anable-Playbook server.yml进行配置时无法建立连接

时间:2016-04-21 作者:JohnnyQ

我正在使用Root.io\'sTrellis 工作流。

我遇到一个错误,无法通过建立连接ansible-playbook.

当我跑步时ansible-playbook server.yml -e env=staging 它向我抛出了一个错误,即无法建立ssh连接,因此我检查了users.yml 文件,并在keys 第节:

- name: "{{ admin_user }}"
  groups:
    - sudo
  keys:
    - "{{ lookup(\'file\', \'~/.ssh/id_rsa.pub\') }}"
    - https://github.com/dummyuser.keys
我意识到我有一个id_rsa.pub 但是我没有在我的服务器上授权它,我正在使用https://github.com/dummyuser.keys 相反所以我去掉了那条线

- "{{ lookup(\'file\', \'~/.ssh/id_rsa.pub\') }}"
然而,问题仍然存在。答复是:

fatal: [10.10.2.5]: UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh.", 
    "unreachable": true
}
还有,为什么配置指向public key 当我们需要private key 通过ssh登录。我通常是这样的

ssh -i ~/.ssh/private_key [email protected]
每当我通过ssh登录到服务器时。

所以我用了另一种方法。这次在cli上指定了密钥

ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa
结果我建立了一种联系:

<10.10.2.5> ESTABLISH SSH CONNECTION FOR USER: dummy_admin
但还有一个错误:它说a password is required 以下是完整信息:

fatal: [10.10.2.5]: FAILED! => {
    "changed": false, 
    "failed": true, 
    "invocation": {"module_name": "setup"}, 
    "module_stderr": "OpenSSH_6.9p1, LibreSSL 2.1.8\\r\\ndebug1: Reading configuration data /etc/ssh/ssh_config\\r\\ndebug1: /etc/ssh/ssh_config line 21: Applying options for *\\r\\ndebug1: auto-mux: Trying existing master\\r\\ndebug2: fd 3 setting O_NONBLOCK\\r\\ndebug2: mux_client_hello_exchange: master version 4\\r\\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\\r\\ndebug3: mux_client_request_session: entering\\r\\ndebug3: mux_client_request_alive: entering\\r\\ndebug3: mux_client_request_alive: done pid = 85702\\r\\ndebug3: mux_client_request_session: session request sent\\r\\ndebug1: mux_client_request_session: master session id: 2\\r\\ndebug3: mux_client_read_packet: read header failed: Broken pipe\\r\\ndebug2: Received exit status from master 1\\r\\nShared connection to 10.10.2.5 closed.\\r\\n", 
    "module_stdout": "sudo: a password is required\\r\\n", 
    "msg": "MODULE FAILURE", 
    "parsed": false
}
我不知道为什么它要输入密码我已经在我的group_vars/staging/vault.yml 以下是内容:

vault_mysql_root_password: stagingpw
vault_sudoer_passwords:
  dummy_admin: $6$rounds=656000$8DWzDN3KQkM9SjlF$DhxLkYaayplFmtj9q.EqzMDWmvlLNKsLU0GPL9E0P2EvkFQBsbjcMCXgWkug4a5E66PfwL4eZQXzMLkhXcPBk0
因此,我最终使用以下命令登录:

ansible-playbook server.yml -e env=staging -vvvv --key-file=~/.ssh/dummy_rsa --ask-become-pass
在向我询问密码后,它可以正常工作并为我的服务器提供服务。

有人能解释一下吗?我错过什么了吗?如果你需要更多细节,请告诉我。

2 个回复
最合适的回答,由SO网友:JohnnyQ 整理而成

我还将此问题发布在discourse@fullyint 已经详细回答了。因此,我只是发布了一个链接,以获取答案和一些摘录

帮助Ansible和ssh找到必要的私钥这意味着您正在使用每个ssh命令手动指定私钥,是的,使用每个Ansible playbook命令手动指定私钥的必然结果是添加--private key=或key file=选项。然而,通过启用ssh和ansible playbook命令来自动查找和使用所需的私钥文件,您可以省去一些麻烦。一种方法是在ssh配置文件中添加一个条目,指定要与主机10.10.2.5一起使用的标识文件。我推荐加载~/。ssh/dummy\\u rsa到您的ssh代理中,它可以为您处理密钥,在尝试连接时尝试多个私钥
确保您的ssh代理正在运行:ssh agent bash添加您的密钥:ssh Add ~/。ssh/dummy\\u rsa如果您在mac上,请将密钥添加到您的密钥链:ssh add-K ~/。ssh/dummy\\u rsa现在,您应该能够运行不带-i选项的ssh命令,以及不带-key file=选项的ansible playbook命令,因为您的ssh代理将通知这些命令各种可用的私钥,以尝试建立ssh连接。

错误原因“sudo:需要密码”

的任务网格通过服务器运行。yml剧本,有些需要sudo。当剧本作为根连接时,这不是问题,但有时剧本不作为根连接。如果作为root用户的初始连接尝试失败,它将返回作为admin\\u用户的连接。如您所发现的,此用户必须通过选项ask been pass指定其sudo密码
也许你已经知道作为root用户的连接失败的原因,但这里有一些可能性:
也许你的远程设备在AWS上,默认情况下root是禁用的,而你的admin\\u用户:ubuntu
可能您已经成功运行了服务器。使用sshd\\u permit\\u root\\u登录的yml:在group\\u vars/all/security中为false。yml,因此不再允许root通过ssh登录(良好的安全性)。可能您尝试使用的私钥没有加载到根用户的authorized\\u密钥中的远程设备上

SO网友:kaiser

您可能尚未添加public 关键点authorized_keys 在机器内部归档。您可能还想添加private 本地SSH代理的密钥。

把你的public 服务器内部的密钥。服务器上已有的密钥示例:

# Add key directly on the box:
echo "$(cat your_public_key)" >> ~/.ssh/authorized_keys
# Add key from local to remote:
ssh user@server "echo \\"$(cat your_public_key)\\" >> ~/.ssh/authorized_keys"
您需要添加private 代理的密钥

# Start agent
eval "$(ssh-agent -s)"
# Add private key
ssh-add ~/.ssh/your_private_key

相关推荐

为什么WordPress需要我的ssh私钥来更新?

将WordPress配置为在应用程序(即WordPress)中进行更新对我来说非常方便。尽管如此,我还是被这些要求所困扰。之后显示的请求字段installing ssh2 for php 不仅要询问我的公钥,还要询问我的私钥。我认为,最多只需要公钥。WordPress是否将我的私钥提供给服务器,以便服务器可以将正确的软件包上载到我的服务器?我熟悉SSH私钥/公钥的工作原理,这就是为什么我不明白WordPress为什么需要这个。如果有的话,我认为更新机制甚至不需要这个协议;它只需使用http或ftp到包服务