为'apache'用户生成SSH密钥

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_rsaid_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)

  • 我不确定,但这样做不是很安全,不是吗? (6认同)
  • @Vincent.谢谢.我已将私钥复制到`/ var/www/.ssh/id_rsa`但是,我仍然收到权限被拒绝错误. (2认同)

yva*_*van 24

因为你是root用户,你可以尝试一下 sudo -u apache ssh-keygen -t rsa

  • 我终于解决了.我使用`sudo -u apache ssh-keygen -t rsa`为'apache'生成密钥.谢谢. (36认同)
  • 您确定用户是apache吗,有时它可以是`httpd`或`www-data`。 (2认同)

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,这很好.


jos*_*sch 5

现有的答案要么不完整,要么不安全。如果您将您的.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用户将知道如何去做。