![sudo ssh-add /root/.ssh/id_rsa 返回错误](https://linux22.com/image/1086612/sudo%20ssh-add%20%2Froot%2F.ssh%2Fid_rsa%20%E8%BF%94%E5%9B%9E%E9%94%99%E8%AF%AF.png)
我正在尝试使用 sudo 使用命令保存 ssh 身份验证ssh-add
:
linux$ sudo ssh-add /root/.ssh/id_rsa
Could not open a connection to your authentication agent.
但正如所指出的,它返回错误
我做了一些研究,发现我必须执行eval "ssh-agent -s"
以下链接中指示的命令:https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent/17695338#17695338
但是如果使用 sudo 命令执行它会出现错误
$ sudo eval `ssh-agent -s`
sudo: eval: command not found
我错过了什么?
答案1
从以下关联:
幸运的是,有一种方法可以解决这个问题。Sudo 有一个配置选项,允许保留发出 sudo 命令的用户的给定环境变量。该选项称为 env_keep,可以通过更改 /etc/sudoers 文件中的设置来配置,如下所示(始终使用 visudo 来编辑文件):
visudo
Defaults env_reset
Defaults>root env_keep+=SSH_AUTH_SOCK
换句话说,在 Defaults env_reset 行下面添加保留 SSH_AUTH_SOCK 变量的行。然后保存文件并运行
ssh-agent bash
ssh-add
并且您应该能够执行 sudo 命令,使用非 sudo 用户的密钥访问您的服务器,而无需输入密钥密码。
答案2
不幸的是,我找不到这个建议的原始来源,但这对我来说很管用。本质上,它在使用 sudo 运行命令时使用了当前用户的 ssh 环境变量。
sudo sh -c 'export SSH_AUTH_SOCK="'"$SSH_AUTH_SOCK"'"; export SSH_AGENT_PID="'"$SSH_AGENT_PID"'"; ssh-add /root/.ssh/id_rsa'