SSH 代理转发可以工作,但是 sudo -u 用户名没有 shell/权限呢?作曲家

SSH 代理转发可以工作,但是 sudo -u 用户名没有 shell/权限呢?作曲家

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

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

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

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

该用户不是管理员,并且执行脚本的文件夹是他的,只能由他而不是整个组写入,所以我不能将所有文件夹的 chmod 设置为 777、775 或其他值;)

问题是,当我想执行脚本时: sudo -u another_user composer update 果然没有找到密钥,因为它们不会转发给该用户。

此外,“another_user”的 shell 被设置为 bin/false,使事情变得更加复杂!

有针对这个的解决方法吗?

总而言之:我想通过我自己的远程服务器使用本地 ssh 密钥访问另一个远程服务器sudo -u another_user ...

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

编辑: 我也已经尝试过了:http://mybrainhurts.com/blog/2012/05/git-sudo-local-ssh-keys.html但我想它不会工作,因为其他用户没有外壳:(

答案1

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

setfacl -R -m u:another_user:rwx "${SSH_AUTH_SOCK%/*}"
sudo -u another_user SSH_AUTH_SOCK="$SSH_AUTH_SOCK" composer update

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

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

答案2

您可能想使用su username(超级用户),它将作为该用户与 sudo 运行。这有点帮助:(不确定 unixstackexchange 上是否还有另一个) https://askubuntu.com/questions/376199/sudo-su-vs-sudo-i-vs-sudo-bin-bash-when-does-it-matter-which-is-used

答案3

上一个,尝试一下ssh other_user@localhost。理论上,应该再次转发您的 ssh-agent 连接,允许 other_user 使用它。然而,这仍然不能/bin/false与 other_user 的 shell 一起使用。

我认为没有 root 权限就没有办法绕过受限 shell(也不应该有)。

man su

如果目标用户具有受限制的 shell(即 /etc/passwd 中该用户条目的 shell 字段未在 /etc/shells 中列出),则 --shell 选项或 $SHELL 环境变量将不会被考虑帐户,除非 su 由 root 调用。

相关内容