0 と 1 の世界の見習い探検家

カテゴリ: パソコン日誌

こんにちは、
立て続けに備忘録です。
WordPress 環境を社内のイントラ環境や個人 PC 内の検証環境でお使いの方向けの記事です。

※この記事で対象としている WordPress のバージョンは 6.4.2

WordPress には REST API の機能があり、コールすることで「記事の投稿」「ファイルのアップロード」など様々な操作を行うことが出来ます。
利用するためには、WordPress の管理画面で「アプリケーションパスワード」を発行する必要がありますが、HTTPS でない環境の場合、このアプリケーションパスワードの発行機能がブロックされており、使えません。
※アプリケーションパスワードの詳細についてはぐぐってください


20240123-201_WP_APWBLOCKED

アプリケーションパスワードを使用すると、実際のパスワードを入力しなくても XML-RPC や REST API などの非対話型システムを介した認証が可能になります。アプリケーションパスワードは簡単に取り消すことができます。サイトへの従来のログインには使用できません。

アプリケーションパスワードには HTTPS が必要ですが、このサイトでは有効ではありません。

これが開発用サイトであれば、適宜、環境タイプを設定して、アプリケーションパスワードを有効化できます。

まぁ当然といえば当然です。
暗号化されてない環境でアプリケーションパスワードを利用するということは、セキュリティ上の重大なリスクがあります。

ただ、社内のイントラ環境やローカルに立てた検証環境などで利用している WordPress で REST API やアプリケーションパスワード機能を使いたい場合もあるかと思います。
その方法のご紹介です。

インターネットに公開されている環境の WordPress ではこの手順は実施しないでください。セキュリティ上のリスクになります。


wp-config.php を編集する


20240123-202_WP_wpconfig

wp-config.php とは WordPress のインストール ディレクトリ内にある php ファイルです。
このファイルに後述の行を追加することで非 HTTPS 環境でもアプリケーションパスワードの発行を受けることができるようになります。

まずは wp-config.php のバックアップを取ってください (破損すると環境自体が壊れるので)

wp-config.php をテキストエディタで開きます。
Windows の場合、改行コードを壊さぬようテキストエディタは VSCode あたりを利用すると安全かもしれません。

そして、一番末尾までスクロールし、
require_once ABSPATH . 'wp-settings.php';
の 1 つ手前の辺りに次の内容を追加してください

define( 'WP_ENVIRONMENT_TYPE', 'local' );
末尾のセミコロンも忘れないでください。
下記のような感じで OK です。

20240123-203_WP_lineadded

上書き保存を行い、WordPress の管理画面のアプリケーションパスワード発行の画面のページをリロードすると、「アプリケーションパスワードには HTTPS が必要ですが、このサイトでは有効ではありません。~~」のメッセージが消え、下記のようにアプリケーションパスワードが発行可能になっていることを確認できると思います。

20240123-204_WP_enabled

お疲れ様です。
WordPress の REST API をお楽しみください。


【おまけ】WP_ENVIRONMENT_TYPE の設定が反映されない!?

下記のコードを追加してもアプリケーションパスワードが有効にならないことがあります。
define( 'WP_ENVIRONMENT_TYPE', 'local' );

私が遭遇したケースでは、上記のコードの挿入位置がよくありませんでした。
最初 wp-config.php の末尾に記載をしていたのですが、その際は反映がなされませんでした。
wp-settings.php を require_once する前に define しないと正しく反映されないようです。
ご注意ください。

トラブル解決のナレッジ記事です。
Docker で立てた WordPress のログイン パスワードがわからなくなってしまったときの対処法を遺しておきます。

方法としては至ってシンプルかつ強引で、DB 上に記録されている WordPress のパスワードを書き換えてしまえ、というものです。


【この記事の解決策が適用できるケース】
・ docker-compose で WordPress のインスタンスを立ち上げた
・ /wp-admin でダッシュボードにログインしようと思ったが、ログイン パスワードを思い出せない
・ インスタンスのコンテナが立ち上がっている環境自体にはログイン可能で docker コマンドを発行できる
・ mysql のユーザー名、パスワード、データベース名自体はわかる (docker-compose.yml に記載している、など)

私が実施した環境は、mysql 5.7 + wordpress 6.4.2 の環境です。

注意: 本手順は WordPress の DB テーブルの手動変更が含まれるため失敗 (エラーなどを含む) すると、WordPress 環境が破壊されるおそれがあります。予めバックアップを取るなど、対策を取ってから実施するようにしてください。
(私はもう最悪捨てても構わない環境だったのでそのままやりました)


手順


1. 環境 (サーバなど) にログインする / SSH などで接続する
 ※docker コマンドを利用できるユーザーに切り替えてください

2. 対象の WordPress インスタンスの mysql コンテナの Container ID を調べる
 コマンド: docker ps -a

20240123-101_cid

3. 対象の mysql コンテナにログインする
 コマンド: docker exec -it [mysql コンテナの Container ID] bash

20240123-102_login

4. mysql にログインする
 コマンド: mysql -u [mysql のユーザー名] --password=[mysql のパスワード] [mysql のデータベース名]
 ※ユーザー名やパスワード、データベース名は、docker-compose.yml 内で指定しているかも?
 ※パスワードをコマンドラインにベタ書きでログインするため、お行儀が悪いよ!って警告が出ます

 私のローカルの検証環境はパスワード含めて wordpress で統一していたため、
 次のような感じ (大馬鹿) ↓
20240123-103_mysqllogin

5. ユーザー一覧を調べる
 mysql クエリ: SELECT * FROM wp_users;
 ※テーブル接頭辞をいじっている場合は、show tables などでテーブル一覧を調べるところから必要
20240123-104_mysqlwpusers

 user_login 列がユーザーのログイン名、user_pass 列がハッシュ化されたパスワードです。

6. SQL で対象のユーザーのパスワードを更新する
 mysql クエリ: UPDATE wp_users SET user_pass = MD5('[新しいログイン パスワード]') WHERE user_login = '[ユーザー ログイン名]';

 ※ユーザー名 = a32kita, 新パスワード = PasSW0rd の場合は
  UPDATE wp_users SET user_pass = MD5('PasSW0rd') WHERE user_login = 'a32kita';

 WHERE 句付け忘れると全ユーザーのパスワードが変更されるのでご注意を!


7. quit で mysql の対話実行から抜け、exit でコンテナからログアウトする


これで /wp-admin から新しいパスワードで WordPress のダッシュボードにログインできるようになります。

こんにちは。
超久々の備忘録記事です。

Windows に Docker Desktop をインストールする際、インストール先とかを変える方法について遺しておきます。
2024 年 01 月段階での情報に基づきます。

結論: "Docker Desktop Installer.exe" のコマンドライン パラメーターを使う


Docker Desktop のインストーラはデフォルトでインストール先が指定されています。
あとついでに wsl のデータとかコンテナ関連のデータの配置先も。
全部 C:\ ドライブなんですよね。
パフォーマンス的には C:\ のほうが望ましいことがほとんどなのでしょうが、
開発検証目的の Docker Desktop 環境で C: ドライブの領域を使うのもなぁということで変更してみました。

後からでも変更する方法があるらしいですが、面倒なのでインストール時点で変えておきたいですよね。


インストーラーのパラメーター例 (WSL を利用する場合)
"Docker Desktop Installer.exe" install --installation-dir="D:\Program Files\Docker\Docker" --windows-containers-default-data-root="D:\Users\XXXX\AppData\Local\Docker\containers" --wsl-default-data-root="D:\Users\XXXX\AppData\Local\Docker\wsl"

上記の例では、Docker Desktop のインストール先と、WSL のイメージのデフォルト配置先、並びにコンテナのデフォルト格納先を変更しています。


【手順】 (Windows 10 の場合)
1. "Docker Desktop Installer.exe" を入手 (適当にダウンロード フォルダーとかにとりあえず落とす)

2. ダウンロード先のフォルダをエクスプローラーで開き、エクスプローラーのメニュー [ファイル] (左上) から
 [Windows PowerShell を管理者として開く] を選択

dockerdesktopwin240123-001_runas

3. cmd.exe を起動する
 ※管理者権限でコマンドラインが実行できればなんでも良いんですけどね

dockerdesktopwin240123-002_cmd


 上記のようにプロンプトの行頭に PS が出ていない状況なら OK

4. コマンドラインの実行
 お好みに合わせてインストール先は変えてくださいな

dockerdesktopwin240123-003_install


これで C:\ ドライブをあまり圧迫せずに済みそうです。



詳細情報
"Docker Desktop Installer.exe" に --help パラメーターを指定するとパラメーターの一覧を吐いてくれます。
いろいろインストール時に指定を掛けたい方は見てみるといいかも。

dockerdesktopwin240123-004_help



C:\ ドライブの領域を使いたくない人向けのソリューション、もっと良いものがある気がしますが、
一旦インストール先を変更する、という解決策のご紹介でした。
では。

CentOS Stream 9 の VPS ホストに公開鍵暗号方式での SSH 接続を構成している際に躓いた部分について備忘録に遺します。


起こったこと (あえて事実ベースで記載)

・さくらインターネット様 (以下 SAKURA) で VPS を契約し、SAKURA から標準提供されている OS "CentOS Stream 9" を選択しホストをセットアップ。
 "VNC コンソール" で SSH アクセスを構成しようとした
 (結果として、SAKURA と VNC コンソールは無関係)
・ローカル PC 端末上の ssh-keygen コマンドでパスワード以外のオプションを指定せずに発行した公開鍵、非公開鍵のうち、公開鍵をサーバの authorized_keys ファイルに転記
・Windows 10 標準機能の SSH クライアント経由 (PowerShell 経由) で、非公開鍵を利用し、アクセスできたことを確認 (正常)
・TeraTerm で同じくアクセスしようとしたところ、認証に失敗 (異常)

20220409temp-01

・TeraTerm からの認証がコケた際にサーバ側の /var/log/secure に次のログが出力されていることを確認
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]


解決策

次の記事に従い、TeraTerm にて公開鍵、非公開鍵を再出力し、ローカルとサーバに再配置した結果、TeraTerm でも認証が通るようになった
※手法は下記記事を参照




原因

下記記事は CentOS で発生した事象に関するものではないが、原因としては概ね一致しているものと思われる。
下記記事にも対処法に関する記載があるが、CentOS Stream 9 に適用する場合は前述の解決策で示した記事の流れに従うほうが適している模様。





サーバ側に出力されたエラーメッセージと "CentOS Stream 9" のキーワードで流れ着いた方の御役に立てれば幸い。。。
ナレッジを公開いただきましたお二方、ありがとうございました。

問題を解決したため、症状と解決法について遺しておきます。

発生症状
 ・一部ウェブサイトに接続できない、タイムアウトする
  Firefox で「修復不能なネットワークプロトコル違反が発生」などのエラーが発生する、またはタイムアウト
  そのようなサイトには Chrome でも接続できない
 ・接続できるサイトもある (Google など)
 ・接続できないサイトについては、ホストに対する ping も通らない

私が遭遇した上記事象の原因
 イーサネット アダプタが一時的にバグった

解決手法
 ドライバの再インストール

解決方法 (実施は自己責任でお願いいたします)
 実施対象端末では、再起動完了まで一時的にインターネットへの接続が完全にできなくなります。

 手順はドスパラさんが画像付きで細かく解説してくれています
 > ネットワークアダプターのドライバーを再インストールする方法 ( Windows 10 )

 ドスパラさんにすら繋がらない方向け (ざっくり)
 1. スタート アイコン (タスクバー左端) を右クリックし、[デバイス マネージャー] を開く
 2. "ネットワーク アダプター" を一覧内から探し、選択して中身を展開
 3. 対象のアダプターを右クリックし、[デバイスのアンインストール] を選択
  ※お使いの PC によってアダプターの名前が変わります
 4. "警告: システムからこのデバイスをアンインストールしようとしています。" の画面が表示されたら…
  ・"このデバイスのドライバー ソフトウェアを削除します。" にはチェックを入れない
  ・[アンインストール] をクリックする
 5. Windows を再起動する (起動時に自動的にドライバが再インストールされる)

謝辞
 ドスパラ様、ありがとうございました。
 

このページのトップヘ