我正在使用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 回答
我不确定我是否正确理解了您的问题,但我经常设置连接到私有bitbucket存储库的机器以便克隆它 . 您不需要(也不应该)使用代理转发(“ssh forwarding”不清楚;有“身份验证代理转发”和“端口转发”,但在这种情况下您也不需要) .
只是为了清楚术语,你在 local machine 中运行Ansible,你正在配置 controlled machine ,并且你想从受控机器ssh到 third-party server .
我所做的是将ssh密钥上传到受控机器,在
/root/.ssh
(更一般地说$HOME/.ssh
,其中$HOME
是将连接到第三方服务器的受控机器用户的主目录 - 在我的情况下是root
) . 我不使用名称id_rsa
和id_rsa.pub
,因为我不想触摸该用户的默认密钥(这些可能有不同的用途;例如,我使用它们来备份受控机器) . 所以这是代码:接下来,您需要告诉受控机器
ssh
:"When you connect to the third-party server, use key X instead of the default key, and logon as user Y" . 你用这种方式告诉它: