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)
我缺少什么?
来自以下链接:
\n\n幸运的是,有一种方法可以解决这个问题。Sudo 有一个配置选项,允许保留发出 sudo 命令的用户指定的环境变量。这些选项称为 env_keep,可以通过更改 /etc/sudoers 文件中的设置进行配置,如下所示(始终使用 visudo 编辑文件):
\n\nvisudo\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\nssh-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)