【问题标题】:Ansible: Install package with pip from a private git repoAnsible:使用来自私有 git 存储库的 pip 安装包
【发布时间】:2015-06-29 14:32:24
【问题描述】:

我正在尝试以这种方式使用 ansible 的 pip 模块从私有 git 存储库安装一个包:

- name: Install my package
  pip: name='git+ssh://git@github.com/mycompany/my-repo.git#egg=0.1.0'
       virtualenv=/path/to/venv

但是当我尝试使用 vagrant 进行配置时,它会挂起,很可能是因为它会提示确认将密钥添加到已知主机列表中。确实,当我在 vagrant 中运行它时:

pip install git+ssh://git@github.com/mycompany/my-repo.git#egg=0.1.0

它会提示确认将 github 添加到已知主机,然后工作正常。

如果我用accept_hostkey=yes克隆它:

- name: Clone repo
  git: repo=git@github.com:mycompany/my-repo.git
       dest=/path/to/dest
       accept_hostkey=yes
       recursive=no

它工作正常,因为它接受在 vagrant 上复制的主机密钥。使用 pip 模块没有这样的选项,有什么办法吗? 作为替代方案,我可以先进行克隆,然后再进行python setup.py install,但我宁愿使用 pip 一步完成。

【问题讨论】:

  • 手动运行pip install git+ssh://git@github.com/mycompany/my-repo.git#egg=0.1.0会发生什么?
  • 它工作正常,是的,抱歉我应该添加此信息
  • 当您在 bash 之外运行命令时是否也一样,即:未定义环境命令时?尝试unset HOME 并再次运行 pip 命令。
  • 好的,所以我刚刚意识到您的意思是在我所做的 vagrant 中运行该命令,并且在提示确认将 github.com 添加到已知主机列表后它也有效,这就是配置最有可能挂起的原因. unset HOME 并没有什么不同。
  • 好的,现在配置应该可以工作了。

标签: git ssh pip ansible


【解决方案1】:

checkout 命令挂起,因为 github.com 不在 Ansible 用户的已知主机中。您应该将 github.com SSH 密钥指纹添加到 /home/user/.ssh/known_hosts 文件中。幸运的是,known_hosts 现在是 Ansible 1.9 中可用的模块: http://docs.ansible.com/known_hosts_module.html

- known_hosts: path=/home/user/.ssh/known_hosts name=github.com key="|1|ba0yHIHdbaD9nswn12xSOyD8DFE=|EVZBrcr46cYcmx6qFRIrzTvWUX4= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=="

如果你使用的是 Ansible ssh-keygen 命令:

- shell: ssh-keygen -l -f /home/user/.ssh/known_hosts -F github.com
  register: github_host_is_known
- shell: ssh-keyscan -H github.com >> /home/user/.ssh/known_hosts 
  when: github_host_is_known|failed

【讨论】:

  • 这可行,但我宁愿不在剧本中硬编码密钥
  • 已编辑以便在剧本中没有硬编码的密钥。
【解决方案2】:

运行此任务以将主机密钥添加到您的 known_hosts 文件中:

- name: Whitelist github.com
  shell: if [ ! -n "$(grep "^github.com " ~/.ssh/known_hosts)" ]; then ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null; fi

【讨论】:

  • 你能用ssh-keycan 选择生成主机的密钥吗?
  • “哪个键”是什么意思?主机只有一个密钥 = 它的身份。
【解决方案3】:

如果此问题与授权的主机密钥有关,而不是与正确的私钥有关,那么您可以执行以下操作。

在运行pip之前,您始终可以在“~/.ssh/authorized_keys”中手动授权主机密钥。

例子:

https://stackoverflow.com/a/24305223/315168

要拥有访问私有 Github 存储库的正确私钥,您可以使用 SSH 代理转发。

【讨论】:

  • 您有在这种情况下使用 ssh 代理转发的示例吗?
猜你喜欢
  • 2018-11-29
  • 2020-11-20
  • 2014-11-13
  • 2018-07-05
  • 2011-06-17
  • 2023-03-18
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多