sudo 无法访问私钥

sudo 无法访问私钥

我有一对公钥和私钥,用于~/.ssh通过 SSH 连接到 GitHub。

为了测试我是否正确设置了 GitHub 的 SSH,我使用了,效果很好。ssh -T [email protected]

另外,如果我以超级用户身份执行上述命令,它可以正常工作。

su
ssh -T [email protected]

但是,当我使用 sudo 时,该命令不起作用。我怀疑它无法访问~/.ssh运行时存储在的密钥对sudo

下面的命令失败。

sudo ssh -T [email protected]

你可以使用任何 Ubuntu 发行版轻松复制此问题,并且GitHub 帮助页面。

编辑

我知道我可以将私钥传递给ssh以下人员:

ssh -i <path-to-private-key> -T [email protected]

我只是想知道为什么使用会导致私钥无法访问。sudo ssh -T [email protected]

答案1

假设:有一个为您的常规用户运行的身份验证代理,并且该代理持有密钥。

ssh从未提升的 shell 中生成的程序会继承关键的环境变量SSH_AUTH_SOCK,该变量会告诉它与代理通信的套接字的位置。ssh能够使用代理,这就是您通常使用代理的方式。

su不取消设置变量。afterssh能够su通过变量找到套接字。通常,套接字不能由所有者以外的用户访问,但现在ssh以 root 身份运行,并且 root 可以访问(几乎)任何文件,无论其权限如何。

sudo 取消设置变量(默认情况下;参见)。ssh无法sudo ssh …找到套接字。就好像代理不在那里一样。ssh尝试在中的几个默认位置找到正确的私钥~/.ssh,但现在它会在根目录的主目录中检查,而不是在正确私钥所在的常规用户主目录中检查。

答案2

您可以使用 ssh 的 -i 选项将路径传递给您的身份文件。

ssh user@host -i /path/to/keyfile

相关内容