WordPressのアップデートをSSH + 公開鍵で実行する方法

さてさて、このブログを始めてから後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バージョンによって変更してください。

そして、nginxapachephp-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接続から開放されるかと思うと嬉しい半面、ターミナルでカタカタをコマンドを打っているとなんだか自分がスーパープログラマーになったように錯覚するのも悪くないかなーなんてちょっと感傷に浸ったりもしてしまいました。

たぶんそのうちなれることでしょう😊✨

ということで、今回の情報が皆さんのお役にたてると嬉しいです!

ではでは♪