九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、このブログを始めてから後2ヵ月ほどで早2年が過ぎようとしています。移転前のブログも含めると2013年から開始しているのでプログラムとピアノ以外は何も続かない私としてはロングランといっていいでしょう😊✨
ちなみに、ここまでブログが続いている理由のひとつとしてはやはり「手軽さ」が挙げられます。昔はいちいちHTMLタグを駆使してアップロードして〜なんて作業をやらざるを得ませんでしたが、今は記事だけならwordpress
でちょちょいのちょいですOKです。
ただ、以前からこの手軽なwordpress
にも不満がひとつだけありました。
それは・・・
プラグインやテーマのアップデートが面倒
というものです。
皆さんも見たことがあると思うのですが、プラグインやテーマをアップデートしたり新規インストールする場合には以下のようなダイアログが表示されてFTP情報を入力する必要があります。
しかも、私の場合は公開鍵を使った接続のみ許可しているので、このダイアログに入力するだけではアップデートができず、しかたなくwp-cli
を使って毎回アップデートを実行していました。
といってもwordpress
は頻繁に更新を要求してくるので、そろそろ重い腰を上げて公開鍵を使ってアップデートする方法をまとめておくことにしました。
今回はその手順を備忘録として残しておきたいと思います。
実行環境:CentOS
※ 注意: 専用サーバーやVPSなど管理者権限が必要な環境でないとうまくいかない可能性が高いです。また、公開鍵の設定を誤ってしまうとssh接続ができなくなる可能性もありますので、sshに不慣れな方は特にご注意ください。(責任はとれませんので・・・)
目次
wordpress専用の公開鍵ファイルをつくる
では、sshでサーバーに接続してwordpress
専用の公開鍵をつくっていきましょう。(※ ここでログインしたユーザー名を覚えておいてください。以下username
として説明します)
まずは公開鍵を入れておくフォルダを作成します。
mkdir ~/.wp_ssh/
そして次のコマンドを実行してください。
ssh-keygen -f ~/.wp_ssh/id_rsa
実行すると以下のようにパスワードと確認入力を求められますが今回はパスワードはなしで実行(何も入力せずエンターキーを押す×2)します。
実行が完了すると、以下の2ファイルが~/.wp_ssh
フォルダに保存されているはずです。
- id_rsa
- id_rsa.pub
では作成した公開鍵をサーバーに登録しましょう。
cat ~/.wp_ssh/id_rsa.pub >> ~/.ssh/authorized_keys
※ すでに公開鍵が登録されている場合を想定しています。もし初めてならcp
でそのままコピーするといいでしょう。
そしてここからが比較的重要なのですが、作成した鍵ファイルはPHPで実行できるようになっていないといけません。つまり、ファイルの所有者を変更するのですが、これが環境によって違ってくるので注意が必要です。
例えば、ウェブサーバーがnginx
の場合は「nginx」が所有者であるべきですし、apache
なら「apache」(OSによっては「www-data」だったりもする)となるので注意が必要です。
※ もしユーザー名がわからない場合はチェックコードを実行してみてください。
ということで、今回はnginx
を想定して実行することにします。
sudo chown -R nginx:nginx ~/.wp_ssh
そして、さらに権限も変更しておきましょう。
sudo chmod -R go-rwx ~/.wp_ssh
wordpressのssh設定を書き込む
では、作成したSSHの設定をwordpressのwp-config.php
の一番下に追加しましょう。
// 省略 /* SSH */ define('FS_METHOD', 'ssh2'); define('FTP_PUBKEY', '/home/username/.wp_ssh/id_rsa.pub'); define('FTP_PRIKEY', '/home/username/.wp_ssh/id_rsa'); define('FTP_USER', 'username'); define('FTP_HOST', '127.0.0.1'); // もしくはsshのポートを変更している場合は次のようにします define('FTP_HOST', '127.0.0.1:12345');
以上で設定は完了です!
お疲れ様でした。
エラーが発生したら
「PHP の SSH2 拡張機能が使用できません」と表示された
もしwordpressからアップデートやインストールを実行しようとして、以下のような表示が出た場合、必要なモジュールがPHPにインストールされていないことが原因です。
以下のようにして「libssh2」をインストールしましょう。(CentOsの場合)
sudo yum install --enablerepo=remi-php72 php-pecl-ssh2
※ リポジトリの「remi-php72」はインストールされているPHPバージョンによって変更してください。
そして、nginx
やapache
、php-fpm
などのウェブサーバー関連のサービスを再起動してください。
sudo systemctl restart nginx sudo systemctl restart php-fpm
もしphpinfo()
を実行して以下のようにSSH2
の項目が出ていたらインストールは完了です。
チェックコード
もしPHPを実行しているユーザー名がわからない、もしくはどうしても以下のようにエラー表示が出る場合はwordpressを設置しているサーバーで以下のPHPをブラウザで実行してみてください。
<?php echo 'PHPを実行しているユーザー名は、「'; echo exec('whoami'); echo '」です。'; // ここのパスをあなたの環境に合わせてください $ssh_dir = '/home/username/.wp_ssh'; if(!file_exists($ssh_dir)) { die('sshのフォルダが存在していないか権限がありません。'); } try { $public_key = $ssh_dir .'/id_rsa.pub'; file_get_contents($public_key); } catch (\Exception $e) { echo 'パブリックキーが存在していないか権限がありません。'; } try { $secret_key = $ssh_dir .'/id_rsa.pub'; file_get_contents($secret_key); } catch (\Exception $e) { echo 'シークレットキーが存在していないか権限がありません。'; }
それでもうまくいかない場合
それでもうまくいかない場合は、ユーザーフォルダの権限を755
に変更するなどして試してみてください。
sudo chmod 755 /home/username
おわりに
今回は、wordpressのアップデートをSSHで実行する方法を紹介しました。
これでアップデートする場合にめんどうなSSH接続から開放されるかと思うと嬉しい半面、ターミナルでカタカタをコマンドを打っているとなんだか自分がスーパープログラマーになったように錯覚するのも悪くないかなーなんてちょっと感傷に浸ったりもしてしまいました。
たぶんそのうちなれることでしょう😊✨
ということで、今回の情報が皆さんのお役にたてると嬉しいです!
ではでは♪