LoginSignup
34
34

More than 5 years have passed since last update.

apacheユーザーが git clone をするまでの手順

Last updated at Posted at 2014-03-12

Webアプリケーション上から git clone をする際にはまったのでメモしておきます。
ちなみにgitコマンドはphp上からパイプで実行しました。

今日もニコニコ カチャカチャカチャ・・・ッターン!

手順

1.デプロイ用アクセスのためのssh秘密鍵/公開鍵を生成します。

ssh-keygen -t rsa

2.公開鍵をGitHub/GitLabリポジトリの Deploy Key に登録します。

3.秘密鍵の所有者をapache、パーミッション600に設定します。

chown apache:apache deploy_key
chmod 600 deploy_key

必要ならsudoを使います。

4.git-ssh.sh を作成します。

git-ssh.sh
#!/bin/sh
exec ssh -i /path/to/deploy/key "$@"
chmod 755 git-ssh.sh

5.clone用のシェルスクリプトも作成しておきます。

clone.sh
#!/bin/sh
# cloneの準備, 引数でパスを受け取ったり...
CLONE_TARGET=git@github.com:youraccount/yourrepository.git
export GIT_SSH=/path/to/git-ssh.sh
git clone ${CLONE_TARGET}

6.いずれのシェルスクリプトもapacheユーザーが実行できるようにしておきます。

chmod 755 git-ssh.sh
chmod 755 clone.sh

7.apacheユーザーになってssh接続します。

sudo -u apache ssh -i path/to/deploy/key -T git@github.com

8.きっと怒られます。

stderr
Could not create directory '/path/to/apache/homge/.ssh'.
Host key verification failed.
fatal: The remote end hung up unexpectedly

解決策1:.ssh ディレクトリを作成する場合

上記で怒られた場所に.sshディレクトリを作成し、再度手順7を行います。

mkdir /path/to/apache/homge/.ssh
chmod 755 /path/to/apache/homge/.ssh
sudo -u apache ssh -i path/to/deploy/key -T git@github.com

解決策2:.ssh ディレクトリを作成したくない場合

一時的に.sshディレクトリを作成するか、別のリポジトリ認証済みのPCにて、~/.ssh/known_hosts に登録されている 接続先の指紋 をapacheさんが稼動するPCの/etc/ssh/ssh_known_hostsにコピペします。

解決後

Webページのスクリプトからapacheさんの権限でclone.shを実行します。
動いたら成功!
もし動かない場合はstderrをしっかり出力して原因を確かめてみましょう!

さいごに

はまっている時に助けてくれた神こと l3msh0@github氏 に感謝。

34
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
34