我有一台 Web 服务器,其中有一位专用的非特权用户,他在机器上运行 apache 实例。Web 服务器运行的应用程序的 php 代码位于私有 github 存储库中,我偶尔需要使用 git pull 来更新。
我希望使用我的个人凭证(我的本地 id_rsa 密钥)进行拉取,但出于安全原因,我已将该框设置为只能通过具有 sudo 访问权限的第二个非 root 帐户访问该框,然后sudo -iu username
进入 Web 服务器用户。
我尝试启用 ssh-agent 转发,甚至让 sudo 保留 SSH_AUTH_SOCK 环境变量,但 auth sock 文件的权限错误(对于我 ssh 登录的用户,权限为 700)。
我已经验证密钥确实已添加到代理中,并且可以从第一个用户那里访问它。我尝试ssh-add -L
从 Web 服务器用户那里访问,并收到一条响应,说它无法连接到 ssh-agent。我怀疑这是因为权限错误。
有没有办法以自动方式改变权限?
或者我的做法是错误的?
答案1
我在 Gentoo 机器上遇到了同样的问题,我只能以普通用户身份登录,但需要对 root 帐户使用代理转发。来自man su
:
‘-m’
‘-p’
'--preserve-environment' 不更改环境变量 HOME、USER、LOGNAME 或 SHELL。运行环境变量 SHELL 中给出的 shell,而不是用户密码条目中的 shell,除非运行 su 的用户不是超级用户,并且用户的 shell 受到限制。受限 shell 是未在文件 /etc/shells 中列出的 shell,如果该文件不存在,则未在编译列表中列出的 shell。此选项的部分功能可以通过 --login 和 --shell 覆盖。
所以
su -m -
保留了$SSH_AUTH_SOCK
环境变量并给了我想要的结果。