Edited at

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接続する方法について、日本語で書かれた記事が見つけられなかったため、書きました。誰かの役に立てれば幸いです。