在Ubuntu EC2实例/srv目录克隆GitHub私有仓库遇权限问题
解决Ubuntu EC2实例/srv目录sudo克隆GitHub私有仓库权限问题
你遇到的问题核心是:sudo执行命令时会切换到root用户身份,而root用户没有你之前在普通用户下生成的GitHub认证SSH密钥。普通用户主目录能成功克隆,是因为git用的是该用户~/.ssh下的密钥,而sudo后root的~/.ssh目录要么不存在,要么没有对应的有效密钥,导致GitHub认证失败。
下面是具体解决办法,选一种即可:
方法1:给root用户配置SSH密钥
- 切换到root用户:
sudo -i - 如果root没有
.ssh目录,先创建并设置权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh - 把普通用户的密钥复制到root目录(假设普通用户是ubuntu):
cp /home/ubuntu/.ssh/id_rsa ~/.ssh/cp /home/ubuntu/.ssh/id_rsa.pub ~/.ssh/ - 设置密钥的严格权限(SSH对权限要求极高,必须配置):
chmod 600 ~/.ssh/id_rsachmod 644 ~/.ssh/id_rsa.pubchown -R root:root ~/.ssh - 退出root:
exit,之后再用sudo克隆即可正常执行
方法2:克隆时指定普通用户的SSH密钥
不用给root配置密钥,直接在克隆命令里指定普通用户的密钥路径:
GIT_SSH_COMMAND="ssh -i /home/ubuntu/.ssh/id_rsa" sudo git clone git@github.com:myusername/testwebapp.git /srv/testwebapp
这样sudo执行git时,会用你之前生成的普通用户密钥完成GitHub认证。
方法3:修改sudo配置保留HOME环境变量
编辑sudo配置文件(必须用visudo,避免语法错误导致sudo失效):sudo visudo
找到Defaults env_reset这一行,修改为:Defaults env_reset, env_keep += "HOME"
保存退出后,再执行sudo git clone命令时,git会读取普通用户HOME目录下的.ssh密钥,无需额外配置。
内容的提问来源于stack exchange,提问作者Shriniwas
相关产品推荐
相关产品推荐

