有没有办法使用标准sudo用户在ssh-agent中添加root的ssh私钥?
我不太确定,但这是此命令的限制吗?
在ssh-add 手册页中,我找到了这个:除用户外,任何人都不应读取标识文件。 请注意,如果其他人可以访问标识文件,则 ssh-add 会忽略它们。
这是输出:
sudouser@myhost:/ $ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Yppfd3Xp0Yrm/agent.2429; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2430; export SSH_AGENT_PID;
echo Agent pid 2430;
sudouser@myhost:/ $ eval $(ssh-agent)
Agent pid 2435
sudouser@myhost:/ $ ssh-add /home/sudouser/.ssh/id_rsa
Enter passphrase for /home/sudouser/.ssh/id_rsa:
Identity added: /home/sudouser/.ssh/id_rsa (/home/sudouser/.ssh/id_rsa)
按预期工作。 但是有了root的密钥,我得到了:
sudouser@myhost:/ sudo ssh-add /root/.ssh/ansible/id_rsa
or
sudouser@myhost:/ sudo sh -c 'ssh-add /root/.ssh/ansible/id_rsa'
Could not open a connection to your authentication agent.
sudo
清除环境变量。ssh-add
需要SSH_AUTH_SOCK和SSH_AGENT_PID才能知道如何与ssh-agent
交谈。因此,您必须通过在命令中添加它们来欺骗它:
sudo sh -c 'export SSH_AUTH_SOCK="'"$SSH_AUTH_SOCK"'"; export SSH_AGENT_PID="'"$SSH_AGENT_PID"'"; ssh-add /path/to/roots/private/key'
可能的替代答案,sudo 有一个保留环境变量的选项:
sudo --preserve-env=SSH_AUTH_SOCK -i
或者,您可以将此行添加到 sudoers 文件中以获得相同的效果:
Defaults env_keep+=SSH_AUTH_SOCK