![如何通过 sudo 传递 SSH_AUTH_SOCK(权限被拒绝(公钥))。](https://linux22.com/image/643365/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20sudo%20%E4%BC%A0%E9%80%92%20SSH_AUTH_SOCK%EF%BC%88%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%88%E5%85%AC%E9%92%A5%EF%BC%89%EF%BC%89%E3%80%82.png)
我有一台 Ubuntu 服务器,其用户为ubuntu
:user
ssh -A
我使用(将我的本地机器密钥传递给 SSH)连接到每个用户。从任何我可以连接到 Github 的 SSH 服务器的用户数:
$ ssh -T [email protected]
...
Hi gabipetrovay! You've successfully authenticated, but GitHub does not provide shell access.
但是当我尝试ubuntu
使用sudo
代表进行连接时user
sudo -E -u user ssh -T [email protected]
我收到一个Permission denied (publickey)
错误。
使用-vv
选项,我可以看到,当我代表机器上的密钥ssh
以 sudo 身份运行时,不会提供给 ssh 服务器。作为比较:user
ubuntu
直接形式user
:
debug2: key: /Users/gabriel/.ssh/id_rsa (0x7fbf09390020),
debug2: key: /home/mono/.ssh/id_rsa ((nil)),
debug2: key: /home/mono/.ssh/id_dsa ((nil)),
debug2: key: /home/mono/.ssh/id_ecdsa ((nil)),
debug2: key: /home/mono/.ssh/id_ed25519 ((nil)),
使用:ubuntu
sudo -u user
debug2: key: /home/mono/.ssh/id_rsa ((nil)),
debug2: key: /home/mono/.ssh/id_dsa ((nil)),
debug2: key: /home/mono/.ssh/id_ecdsa ((nil)),
debug2: key: /home/mono/.ssh/id_ed25519 ((nil)),
所以看来通过sudo
SSH_AUTH_SOCK套接字是不被考虑的。
我也添加了,Defaults env_keep+=SSH_AUTH_SOCK
但/etc/sudoers
仍然不起作用。
我该如何实现这一点?我需要代表用户执行来自用户的ssh
命令。git
ubuntu
user
答案1
除了添加到 之外Defaults env_keep+=SSH_AUTH_SOCK
,sudoers
您还需要授予user
对 SSH_AUTH_SOCK 变量指向的文件的访问权限。默认情况下不启用它。