当我尝试sudo ssh ...
我的权限被拒绝时,因为ssh
查找/root/.ssh
密钥,而不是在/home/me/.ssh
. 但$HOME
仍然设置为/home/me
. 为什么不ssh
进去看$HOME/.ssh
?
ssh
ignores $HOME
,它根据真实的¹ uid(使用由pw_dir
返回的结构的字段getpwuid()
)从用户数据库中获取主目录。
鉴于ssh
可以像那样在那里写入文件known_hosts
,它不这样做也好,/home/me/.ssh
因为你最终会在那里得到一个根拥有的文件。
您始终可以使用sudo ssh -i ~/.ssh/id_rsa ...
,或使用身份验证代理,并确保将套接字的路径传递给该身份验证代理到 root:
sudo --preserve-env=SSH_AUTH_SOCK ssh ...
Run Code Online (Sandbox Code Playgroud)
或者
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" ssh ...
Run Code Online (Sandbox Code Playgroud)
另外,您确定需要以ssh
root身份运行吗?是否能够在 1024 以下的 TCP 端口上创建隧道或绑定本地端口转发?如果只是为了能够root
在远程主机上登录,这样做ssh root@host
就足够了。
¹您实际上可以将真实的 uid 恢复到我们原来的 uid,同时保留 0 的有效 uid:
sudo perl -e '$<=getpwnam($ENV{SUDO_USER}); exec@ARGV' ssh ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
391 次 |
最近记录: |