ssh-add 永久使用 ansible
ssh-add permanently using ansible
我正在尝试在 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
它 returns 结果如下:
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 检查时,它说代理没有身份。我找不到问题所在。
可以使用相同的命令在终端中手动添加密钥。
您需要从 bash/zsh/etc 启动脚本向代理添加密钥。您可以通过 Ansible 将这些行添加到文件中,但否则效果不佳。
ssh-agent
效果仅限于调用它的单个任务,因为 ssh-agent
的连接信息保存在环境变量中。您可能想查看您在任务中评估的内容。
$ ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-uKzY20owbmmf/agent.8285; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8286; export SSH_AGENT_PID;
echo Agent pid 8286;
如果没有上面显示的设置,您将无法在以后的任务或交互式会话中使用此 ssh-agent
。
在任何情况下我都不会向 运行 ssh-agent
推荐这种方式 (eval $(ssh-agent)
)。很难在退出时正确完成守护进程 ssh-agent
,很容易在系统中创建无所有者的 ssh-agent
进程。如果改用SSH代理转发会好很多。
我发现在 Ansible 任务中仍然可以 运行 ssh-add
以便以后的任务可以使用我添加的键。但是有必要在剧本开始之前从剧本中删除 eval `ssa-agent`
并分别 运行 。这样代理的环境变量就可以被 Ansible 任务看到。
我正在尝试在 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
它 returns 结果如下:
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 检查时,它说代理没有身份。我找不到问题所在。
可以使用相同的命令在终端中手动添加密钥。
您需要从 bash/zsh/etc 启动脚本向代理添加密钥。您可以通过 Ansible 将这些行添加到文件中,但否则效果不佳。
ssh-agent
效果仅限于调用它的单个任务,因为 ssh-agent
的连接信息保存在环境变量中。您可能想查看您在任务中评估的内容。
$ ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-uKzY20owbmmf/agent.8285; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8286; export SSH_AGENT_PID;
echo Agent pid 8286;
如果没有上面显示的设置,您将无法在以后的任务或交互式会话中使用此 ssh-agent
。
在任何情况下我都不会向 运行 ssh-agent
推荐这种方式 (eval $(ssh-agent)
)。很难在退出时正确完成守护进程 ssh-agent
,很容易在系统中创建无所有者的 ssh-agent
进程。如果改用SSH代理转发会好很多。
我发现在 Ansible 任务中仍然可以 运行 ssh-add
以便以后的任务可以使用我添加的键。但是有必要在剧本开始之前从剧本中删除 eval `ssa-agent`
并分别 运行 。这样代理的环境变量就可以被 Ansible 任务看到。