GitHub
Apache
SSH

apache のデフォルト実行ユーザ www-data で github や bitbucket にSSH 接続する

More than 1 year has passed since last update.

Redmine や Jenkins などWEBサーバを建てていると、github や bitbucket 、デプロイ先のPCなどに、WebサーバーからSSH接続したくなるときがあります。今回は、WEBサービスの実行ユーザ(www-data)のSSH接続の設定方法を記述します。なお、私の使っているOSはUbuntu であるため、Redhat系ではどうやって行うのか知りません。知っている人が教えていただければ嬉しいです。

結論

www-dataで公開鍵、秘密鍵を作成

$ sudo -u www-data ssh-keygen -t rsa

作成した公開鍵(id_rsa.pub)はgithubやbitbucketに登録しておきます。
/var/www/.ssh/config に次の設定を記述

config
Host github.com
    Hostname github.com
    IdentityFile /var/www/.ssh/id_rsa
    User git
    Port 22

Host bitbucket.org
    Hostname bitbucket.org
    IdentityFile /var/www/.ssh/id_rsa
    User git
    Port 22

ログインテストをしてみて、正しくログインできれば完了です。

$ ssh -T github.com

解説

debian 系のapache2 実行ユーザはwww-data です。ですが、www-data はLinuxのシステムユーザのため、ログインすることができません。なので、su www-data と実行してログインユーザを変更することができず、ssh-keygen も実行できません。
解決策としては sudo コマンドを利用します。

$ sudo -u www-data ssh-keygen

-u オプションでコマンドの実行ユーザーを指定することができます。
公開鍵と秘密鍵が/var/www/.ssh/に作成されます。
あとは、Githubやbitbucketに公開鍵を登録して、configファイルを作成してやると完了です。

www-data のホームフォルダ

www-data のホームフォルダは/var/www/です。

ホームフォルダの場所は

$ sudo cat /etc/passwd | grep www-data

で確認できます。

なので、www-data でSSHコマンドを実行するときは /var/www/.ssh/ フォルダが参照されるということです。
今回はsudo コマンドでssh-keygenコマンドを実行しましたが、www-data のホームフォルダが/var/www/ であるということを知っているならば、次のようなコマンドでもSSH接続の設定ができるはずです。これだったらRedhat系でもできるんじゃないでしょうか?

$sudo su
# mkdir -p /var/www/.ssh/
# ssh-keygen -t rsa -f /var/www/.ssh/id_rsa
# vi config
Host github.com
    Hostname github.com
    IdentityFile /var/www/.ssh/id_rsa
    User git
    Port 22

# chown -R www-data:www-data /var/www/.ssh/

あとがき

www-data でSSH接続する方法について、日本語で書かれた記事が見つけられなかったため、書きました。誰かの役に立てれば幸いです。