SSH 代理转发有效,但是 sudo -u username no shell/permissions 呢?作曲家

Nal*_*esh 2 shell ssh sudo forwarding ssh-agent

在远程服务器上工作 (A) 我想使用我的本地 SSH 密钥访问另一台不受我控制的服务器 (B) 上的存储库。

一般来说,这就像一个魅力。

我在远程服务器 (A) 上以 myUsername 身份登录,并且可以很好地访问 B 上的存储库。

问题是,有些任务(作曲家更新)需要由 (A) 上的另一个用户执行。

该用户不是管理员,执行脚本的文件夹是他的,只能由他而不是整个组写入,因此我不能将所有文件夹都修改为 777、775 或其他内容;)

问题是,当我想用​​以下方式执行脚本时: sudo -u another_user composer update 果然没有找到任何密钥,因为它们不会为此用户转发。

此外,“another_user”的外壳设置为 bin/false 使事情进一步复杂化!!!

这个问题有方法解决吗?

总结一下:我想通过我自己的远程服务器使用我的本地 ssh-keys 通过我自己的远程服务器访问另一个远程服务器 sudo -u another_user ...

如果有更多经验的人可以启发我,那就太好了!

编辑:我也试过这个:http : //mybrainhurts.com/blog/2012/05/git-sudo-local-ssh-keys.html但我想它不会工作,因为另一个用户没有外壳:(

phe*_*mer 7

做到这一点的唯一方法是通过一个非常肮脏的黑客。我不推荐它。

setfacl -R -m u:another_user:rwx "${SSH_AUTH_SOCK%/*}"
sudo -u another_user SSH_AUTH_SOCK="$SSH_AUTH_SOCK" composer update
Run Code Online (Sandbox Code Playgroud)

原因是您的 SSH 密钥是通过命名套接字访问的。该命名套接字位于您拥有的目录中,其他任何人都无法访问。授予其他用户访问权限的唯一方法是更改​​套接字的权限。
上面通过扩展文件系统属性来做到这一点。如果您的/tmp文件系统不支持 ACL,那么唯一的方法就是使用 ACL,chmod o+rwx这是非常不安全的。

更好的解决方案是修复阻止您以自己的用户身份运行该命令的任何内容。