【发布时间】:2015-11-20 10:50:15
【问题描述】:
我正在尝试在 ansible 任务中使用 ssh-add 将 SSH 密钥添加到 SSH 代理。
我的 ansible 任务如下所示:
- name: add id_rsa in ssh-agent
shell: eval `ssh-agent -s` && ssh-add -K ~/.ssh/id_rsa_mykey
它会返回以下结果:
TASK: [add id_rsa in ssh-agent] ***********************************************
changed: [testcom.mydomain.com] => {"changed": true, "cmd": "eval `ssh-agent -s` && ssh-add -K ~/.ssh/id_rsa_mykey", "delta": "0:00:00.086725", "end": "2015-08-26 13:35:38.527742", "rc": 0, "start": "2015-08-26 13:35:38.441017", "stderr": "Could not create keychain item\nIdentity added: /var/root/.ssh/id_rsa_mykey (/var/root/.ssh/id_rsa_mykey)", "stdout": "Agent pid 8559", "warnings": []}
我不知道为什么它无法将钥匙添加到钥匙串中,但似乎钥匙已添加。但是,当我使用 ssh-add -l 检查时,它说代理没有身份。我找不到问题出在哪里。
可以使用相同的命令在终端中手动添加密钥。
【问题讨论】:
-
你打算为root用户添加这个密钥吗?
-
@udondan 是的,我打算为 root 添加它。这会导致问题吗?
-
我只是想知道,因为问题中没有提到它,但生成的输出显示任务是以 root 身份运行的。只是认为这可能是偶然的,而您正在查看错误的用户。
-
@udondan 哦,我明白了,对不起,我应该在问题中提到它。是的,我正在以 root 用户身份运行 playbook,如果已添加密钥,我会检查 root 用户的代理。根据 Alister Bulman 的回答,貌似 ssh-add 并没有直接在 ansible 任务中生效。
-
即使这样可行,您也不知道在此任务运行后设置了环境变量 ssh-agent。不过,您可以自己编写一个包装脚本,它将 ssh-agent 的输出重定向到一个文件,然后您可以
source稍后将其放入您的 shell。