sudo ssh-add /root/.ssh/id_rsa 返回错误

Moh*_*LEL 6 ssh command-line bash sudo

我正在尝试ssh-add使用 sudo 使用命令保存 ssh 身份验证:

linux$ sudo ssh-add /root/.ssh/id_rsa
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud)

但如所示,它返回错误

我做了一些研究,发现我必须eval "ssh-agent -s"按照以下链接中的指示执行命令:https : //stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-代理/17695338#17695338

但是如果使用 sudo 命令执行它我会出错

$ sudo eval `ssh-agent -s`
sudo: eval: command not found
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

Moh*_*LEL 3

来自以下链接

\n\n

幸运的是,有一种方法可以解决这个问题。Sudo 有一个配置选项,允许保留发出 sudo 命令的用户指定的环境变量。这些选项称为 env_keep,可以通过更改 /etc/sudoers 文件中的设置进行配置,如下所示(始终使用 visudo 编辑文件):

\n\n
visudo\n\nDefaults    env_reset\nDefaults>root    env_keep+=SSH_AUTH_SOCK\n
Run Code Online (Sandbox Code Playgroud)\n\n

换句话说,添加将 SSH_AUTH_SOCK 变量保留在 Defaults env_reset 行下方的行。然后保存文件并运行

\n\n
ssh-agent bash\nssh-add\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且您应该能够执行 sudo 命令,使用非 sudo user\xe2\x80\x99s 密钥访问您的服务器,而无需询问密钥密码。

\n


小智 0

不幸的是,我找不到这个建议的原始来源,但这对我来说很有效。本质上,它在使用 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'
Run Code Online (Sandbox Code Playgroud)