ssh 代理拒绝使用 sudo 用户添加根的私钥



有没有办法使用标准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

最新更新