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