是否可以在代理中为辅助剧本中的私人仓库添加ssh密钥?

时间:2017-08-24 02:47:02

标签: ssh vagrant ansible

我正在使用Ansible来提供一个Vagrant环境。作为配置过程的一部分,我需要使用ssh密钥从当前配置VM连接到专用外部存储库,以便使用composer为应用程序提取模块。在提出这个问题之前,我已经对此做过很多阅读,但仍然无法理解正在发生的事情。

我想要发生的是:

  1. 作为Playbook的一部分,在Vagrant VM上,我将ssh密钥添加到ssh-agent的私人仓库
  2. 使用该私钥,我可以使用composer来从外部源
  3. 中获取模块

    我已经阅读过强调指定playbook执行中的键的文章。 (例如ansible-play -u username --private-key play.yml)据我所知,这对我来说并不适合,因为我通过Vagrant文​​件调用了剧本。我也读过提及ssh转发的文章。 (SSH Agent Forwarding with Ansible)。根据我所读到的,这就是我所做的:

    1. 在正在配置的VM上,我插入一个known_hosts文件,该文件包含我需要的存储库的机器的主机条目:

    2. 在正在配置的VM上,我在~/.ssh/config中有以下内容:

      Host <VM IP>
        ForwardAgent yes
      
    3. 我的ansible.cfg中有以下条目来支持ssh转发:

      [defaults]
      transport = ssh
      
      [ssh_connection]
      ssh_args=-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/tmp/ansible-ssh-%h-%p-%r
      
      [privilege_escalation]
      pipelining = False
      
    4. 我还将以下任务添加到试图的剧本中 使用作曲家:

      - name: Add ssh agent line to sudoers
        become: true
        lineinfile:
          dest: /etc/sudoers
          state: present
          regexp: SSH_AUTH_SOCK
          line: Defaults env_keep += "SSH_AUTH_SOCK"
      
    5. 我退出ansible供应商并通过shell配置程序将配置的VM上的私钥添加到代理(这是我怀疑我出错的地方)

    6. 然后,我尝试使用composer,或通过命令模块调用git。像这样,例如,测试:

      - name: Test connection
        command: ssh -T git@github.com
      
    7. 最后,为了防止我没有正确理解ssh连接转发,我认为应该发生的事情是我需要先将密钥添加到本地机器的代理,然后转发到配置的VM,用于通过composer获取存储库。所以我在执行ssh-add并运行配置程序之前在我的本地计算机上使用了vagrant up

    8. 无论如何,当我这样做时,我总是被许可拒绝。我非常理解我在理解ssh转发应该如何在这里工作时可能缺少的内容以及实现此连接的任何指导。

1 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解了您的问题,但我经常设置连接到私有bitbucket存储库的计算机以便克隆它。您不需要(并且不应该)使用代理转发(&#34; ssh转发&#34;不清楚;有&#34;认证代理转发&#34;以及&#34;端口转发&#34;,但在这种情况下你也不需要。)

为了明确术语,您在本地计算机中运行Ansible,您正在配置受控计算机,并且您希望从受控计算机ssh到第三方服务器

我所做的是将ssh密钥上传到受控计算机,/root/.ssh(更常见的是$HOME/.ssh,其中$HOME是将连接到的受控计算机用户的主目录第三方服务器 - 在我的情况下是root)。我没有使用名称id_rsaid_rsa.pub,因为我不想触摸该用户的默认密钥(这些密钥可能有不同的用途;例如,我使用他们备份受控机器)。所以这是代码:

- name: Install bitbucket aptiko_ro ssh key
  copy:
    dest: /root/.ssh/aptiko_ro_id_rsa
    mode: 0600
    content: "{{ aptiko_ro_ssh_key }}"

- name: Install bitbucket aptiko_ro ssh public key
  copy:
    dest: /root/.ssh/aptiko_ro_id_rsa.pub
    content: "{{ aptiko_ro_ssh_pub_key }}"

接下来,您需要告诉受控计算机ssh:&#34;当您连接到第三方服务器时,使用密钥X而不是默认密钥,并以用户Y&#34; 。你用这种方式告诉它:

- name: Install ssh config that uses aptiko_ro keys on bitbucket
  copy:
    dest: /root/.ssh/config
    content: |
      Host bitbucket.org
      IdentityFile ~/.ssh/aptiko_ro_id_rsa
      User aptiko_ro