【问题标题】:execute ssh-add with ansible raise an error使用 ansible 执行 ssh-add 会引发错误
【发布时间】:2015-11-05 07:38:12
【问题描述】:

我正在尝试使用 Ansible 为 ssh 连接创建基础架构。

- name: Copy ssh key to each server
  copy: src=static_folder_key dest=/home/ec2-user/.ssh/ mode=0600

- name: Enable ssh Agent
  shell: eval $(ssh-agent -s)

- name: Adding ssh key for static forlder project
  shell: ssh-add /home/ec2-user/.ssh/static_folder_key
  sudo: True

我创建一个新的 ssh 密钥并复制到我的服务器。然后我执行代理,然后添加新密钥以允许连接。但是当我执行 ansible 时,我得到了这个错误。

TASK: [git | Adding ssh key for static forlder project] *********************** 
failed: [admin_vehicles] => {"changed": true, "cmd": "ssh-add /home/ec2-user/.ssh/static_folder_key", "delta": "0:00:00.004346", "end": "2015-08-12 15:05:00.878208", "rc": 2, "start": "2015-08-12 15:05:00.873862", "warnings": []}
stderr: Could not open a connection to your authentication agent.
failed: [leads_messages] => {"changed": true, "cmd": "ssh-add /home/ec2-user/.ssh/static_folder_key", "delta": "0:00:00.004508", "end": "2015-08-12 15:05:01.286031", "rc": 2, "start": "2015-08-12 15:05:01.281523", "warnings": []}
stderr: Could not open a connection to your authentication agent.

FATAL: all hosts have already failed -- aborting

如果我手动执行此操作,一切都会好起来的。

ssh-add /home/ec2-user/.ssh/static_folder_key 
Identity added: /home/ec2-user/.ssh/static_folder_key (/home/ec2-user/.ssh/static_folder_key)

那么有什么建议吗?也许我在剧本任务中遗漏了一些东西?

【问题讨论】:

标签: ssh ansible ssh-keys ansible-playbook ssh-agent


【解决方案1】:

每个任务的环境都是独立的,因此您不能将一个任务中的ssh-agent 设置留给其他任务。

我强烈建议您使用 SSH 代理转发。将以下内容放入~/.ssh/config,然后在本地运行ssh-agentssh-add static_folder_key,然后再运行ansible-playbook。就是这样。

Host *
ForwardAgent yes

即使代理转发不是一个选项,您也不必为没有密码的私钥文件运行ssh-agent。将以下配置复制到远程主机上的~/.ssh/config 并运行sshstatic-folder-host

Host static-folder-host
Hostname static-folder-host.static-folder-domain
User static-folder-user
IdentityFile ~/.ssh/static_folder_key

【讨论】:

    【解决方案2】:

    解决方案是在ssh-add 之前调用eval "$(ssh-agent)"。最初我尝试了两个 Ansible 任务,但它以同样的方式失败,因为它们是原子的并且不能持久化状态。我最终得到的最终解决方案是在一个任务中调用这两个命令,如下所示:

      - name: Evaluating the authentication agent & adding the key...
        shell: |
          eval "$(ssh-agent)"
          ssh-add ~/.ssh/id_rsa_svn_ssh
    

    【讨论】:

    • 这是 (imo) 更好的答案,因为它解决了 Ansible 中的问题。如果您有几个人将使用 Playbook,那么让他们都按照其他答案的建议配置 ForwardAgent 会很麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2020-12-17
    • 2014-07-30
    • 2016-03-29
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多