0.序論
WebサーバとDBサーバを別のマシンに切り分ける場合、WebサーバからDBサーバにパスワードなしでアクセスできなければ正常にアクセスできません。
そのための方法を以下に記します。
1.Webサーバ側(ssh接続元)にssh鍵を作成
ls -al ~/.ssh #まず鍵がないことを確認
ssh-keygen -t rsa #鍵作成
- 1行目で、
id_rsa
とかid_rsa.pub
があったら、それを使い回せばOK - 2行目でパスフレーズの入力を求められるが、何も入力せず
Enter
キーを押せば良い
2.作った鍵をDBサーバ側(ssh接続先)に置く
Webサーバ(ssh接続元)で作成した公開鍵id_rsa.pub
の中身をDBサーバ(ssh接続先)の~/.ssh/authorized_keys
に追記する。
3.上記ファイル(フォルダ)権限の設定
ファイルの所有者のみ読み書きできるよう設定する。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
4.sshを有効にする設定
vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
ファイルに以下の設定をする。
PubkeyAuthentication=yes
PasswordAuthentication=no
- rootユーザからのアクセスを許可するか否かで、
permitRootLogin=yes
とかを記述する。 -
/etc/ssh/sshd_config
ファイル変更後、sshdの再起動忘れずに!
/etc/init.d/sshd restart
- ここまでできたら、実際にssh接続してみて、パスワードなしで接続できるか確認してみると良い
5.実際にWebサーバからDBにアクセスできるようにする
5-1.DBの接続先の設定
Webサーバのアプリケーションの設定で、接続するDBサーバのIPアドレスを記述する。(IPアドレスはifconfig
コマンドで調べられる)
(例1)
WordPress → wp-config.php
ファイルに、
define('DB_HOST', 'localhost');
を記述。
(例2)
MediaWiki → LocalSettings.php
ファイルに、
$wgDBserver='localhost';
を記述。
- いずれの例の場合も、
localhost
の部分を接続したいDBサーバのIPアドレス
にすればOK! - ファイルの場所が分からなければ
find パス名 -name LocalSettings.php
とかで検索かければ見つかる。
5-2.DB側の権限の設定
- 権限の確認
select user, host from mysql.user;
- 特定ユーザの権限の確認
show grants for 'ユーザー名'@'ホスト名';
- 権限の付与
GRANT 権限 ON レベル TO user;
【参考URL】
▼[MySQL]権限の確認と付与
http://qiita.com/shuntaro_tamura/items/2fb114b8c5d1384648aa