当我尝试sudo ssh ...我的权限被拒绝时,因为ssh查找/root/.ssh密钥,而不是在/home/me/.ssh. 但$HOME仍然设置为/home/me. 为什么不ssh进去看$HOME/.ssh?
sshignores $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)
另外,您确定需要以sshroot身份运行吗?是否能够在 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 次 |
| 最近记录: |