首页 文章

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

提问于
浏览
0

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

我想要发生的是:

  • 作为Playbook的一部分,在Vagrant VM上,我将ssh密钥添加到ssh-agent的私有仓库中

  • 使用该私钥,我可以使用composer来从外部源获取模块

我读过一些文章,重点指出了剧本执行中的关键 . (例如 ansible-play -u username --private-key play.yml )据我所知,这不是通过Vagrant文件调用剧本的 . 我也读过提到ssh转发的文章 . (SSH Agent Forwarding with Ansible) . 根据我所读到的,这就是我所做的:

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

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

Host <VM IP>
  ForwardAgent yes
  • 我的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
  • 我还在尝试使用composer的剧本中添加了以下任务:
- 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"
  • 我退出ansible配置器并通过shell配置器将配置的VM上的私钥添加到代理(这是我怀疑我出错的地方)

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

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

不过,无论如何,当我这样做时,我总是被许可拒绝 . 我非常感谢在理解ssh转发应该如何工作的过程中对我可能缺少的内容有所了解,以及有关实现此连接的任何指导 .

1 回答

  • 2

    我不确定我是否正确理解了您的问题,但我经常设置连接到私有bitbucket存储库的机器以便克隆它 . 您不需要(也不应该)使用代理转发(“ssh forwarding”不清楚;有“身份验证代理转发”和“端口转发”,但在这种情况下您也不需要) .

    只是为了清楚术语,你在 local machine 中运行Ansible,你正在配置 controlled machine ,并且你想从受控机器ssh到 third-party server .

    我所做的是将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 :"When you connect to the third-party server, use key X instead of the default key, and logon as user Y" . 你用这种方式告诉它:

    - 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
    

相关问题