Kit*_*Kit 39 php apache git github ssh-keys
如何在Linux中为'apache'用户添加SSH密钥?
背景
我试图向github添加服务挂钩,以便在我推送到我的仓库后通知URL.我有以下php页面设置:
<?php `git pull origin master`;
Run Code Online (Sandbox Code Playgroud)
但是我得到以下输出:
sh: git: Permission denied
Run Code Online (Sandbox Code Playgroud)
这是因为我为github访问生成的密钥是由我的"root"用户生成的.但是,当我从php中执行命令时,运行它的是'apache'用户.
因此,密钥不对应,并且拒绝许可.
由于我无法从终端切换用户生成密钥为'apache',我不太清楚该怎么做.谁有人建议解决方案?
Vin*_*ent 42
您可能必须在apache用户的.ssh目录中复制根生成的密钥.
假设apache的homedir是/ var/www(检查/ etc/passwd),并且命名密钥是id_rsa-git:
mkdir -p /var/www/.ssh/
cp /root/.ssh/id_rsa-git /var/www/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
无需复制公钥.
注意:默认情况下,使用的密钥是id_rsa或id_dsa.您可以更改复制密钥的名称以与此匹配.
您还可以更改id_rsa密钥和.ssh目录的所有权:
chown -R apache:apache /var/www/.ssh
chmod 0700 /var/www/.ssh
chmod 0600 /var/www/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
yva*_*van 24
因为你是root用户,你可以尝试一下 sudo -u apache ssh-keygen -t rsa
dav*_*dav 14
只需在yvan的回答下发布@KitCarrau的评论,这对我有用
sudo -u apache ssh-keygen -t rsa
对于debian
sudo -u www-data ssh-keygen -t rsa
在此之后单击Enter两次,以跳过密码
此外,它建议在/var/www/.ssh
目录中创建公钥/私钥,即使我有我的www direcotry /home/my_user/www
,这很好.
现有的答案要么不完整,要么不安全。如果您将您的.ssh
目录放入 apache 用户 ( /var/www
)的主目录,那么这也很可能会提供该目录的内容,从而将您的 ssh 私钥暴露给公共网络。为防止这种情况,您必须将 apache 配置为不为.ssh
目录提供服务,但现有答案均未说明如何执行此操作。
我还认为,让您的.ssh
目录成为公开服务的 www-root 的子目录仍然很危险,因为即使您向 apache 配置添加规则,升级服务器或执行不相关的其他配置也可能会在没有您的情况下覆盖此规则注意到。
所以这是一个将密钥放在其他地方的答案,默认情况下它不由 apache 提供服务。甚至不需要www-data
像其他人一样成为用户。
首先,找出我们的 apache 用户的主目录,例如通过查看/etc/passwd
和查找www-data
用户或您的发行版的 apache 用户被调用。主目录很可能/var/www
。
然后运行(替换/var/www
为您设置中 apache 用户的主目录):
$ mkdir "$HOME/www-data.ssh"
$ ssh-keygen -q -t rsa -f "$HOME/www-data.ssh/id_rsa" -N ""
$ chown -R www-data:www-data "$HOME/www-data.ssh"
$ mkdir /var/www/.ssh
$ cat << END > /var/www/.ssh/config
> Host *
> IdentityFile $HOME/www-data.ssh/id_rsa
> END
$ chown -R www-data:www-data /var/www/.ssh
Run Code Online (Sandbox Code Playgroud)
现在,您的www-data
用户将在$HOME/www-data.ssh/id_rsa
其所有 ssh 连接中使用 ssh 密钥,并且由于您$HOME
可能与 不同/var/www
,因此将不会提供该目录。因此,即使没有向 apache 添加任何自定义规则,用户也可以看到您的,.ssh/config
但他们将无法访问它指向的私钥。尽管如此,您的www-data
用户将知道如何去做。
归档时间: |
|
查看次数: |
48638 次 |
最近记录: |