【Xserver】エックスサーバーにssh接続、PHPバージョン変更方法

手順

今回設定するSSH接続のフローの概要

SSH接続の基本フロー 1. コマンド実行: ssh [設定名] 2. ~/.ssh/config から設定を自動読み込み 3. 秘密鍵の自動読み込み 4. 公開鍵認証による自動接続

フォルダ構成

~/.ssh/
│
├── config            # SSH接続設定ファイル(テキスト)
│                    # 複数サーバーの接続設定を記述可能
│
├── id_rsa           # 秘密鍵
│                    # 権限: 600(所有者のみ読み書き可)
│                    # 絶対に共有しない
│
├── id_rsa.pub       # 公開鍵
│                    # 権限: 644(所有者は読み書き可、他者は読み取りのみ)
│                    # サーバーに登録する
│
└── known_hosts      # 接続したことのあるサーバーの情報
                     # 初回接続時に自動生成

configファイルの例

# デフォルトの設定(すべてのHostに適用)
Host *
    # タイムアウトを設定(秒)
    ServerAliveInterval 60
    # 圧縮を有効化
    Compression yes

# 開発サーバーの設定例
Host dev
    # サーバーのホスト名またはIPアドレス
    HostName dev.example.com
    # SSHのポート番号(デフォルトは22)
    Port 22
    # ログインするユーザー名
    User developer
    # 使用する秘密鍵の場所
    IdentityFile ~/.ssh/id_rsa

# ステージングサーバーの設定例
Host stg
    HostName stg.example.com
    Port 22
    User deployer
    # 別の秘密鍵を使用する例
    IdentityFile ~/.ssh/staging_key

# 本番サーバーの設定例
Host prod
    HostName prod.example.com
    # セキュリティのため別ポートを使用
    Port 10022
    User production
    IdentityFile ~/.ssh/production_key
    # パスワード認証を無効化
    PasswordAuthentication no

~/.ssh/id_rsaの秘密鍵は以前作成したものを使いまわします

公開鍵をXserverの管理画面で登録

公開鍵を張り付ける

id_rsa.pub が公開鍵ファイルになります。このファイルの内容をXserverの管理画面にコピー&ペーストすることで、先ほどの秘密鍵(id_rsa)と対応する公開鍵認証が設定されます。

.ssh/configファイルを使ってssh接続できるようになります:

ssh xserver

SSHコマンドが設定ファイルの読み込みから認証まで、多くのことを自動的に処理してくれます。

ssh接続でのphpバージョンを変更する手順

管理画面ではphpバージョンを新しいものに変えたのに、ssh接続でphp -vをすると昔のバージョンのままという状況

  1. 管理画面では8.2.22に設定済み
    Xserverの管理画面「PHPバージョン切替」では、すでにPHP 8.2.22に設定していました。
  2. SSH環境では5.4.16のまま
    しかし、SSH接続で確認すると
    php -v
    PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17)
PHPバージョン切替 開発マニュアル ドメイン単位でPHPのバージョンを切り替えることが可能です。 ▼ PHPバージョン切替 設定対象ドメイン bizlabo.site 変更 現在のバージョン PHP8.2.22 変更後のバージョン PHP8.2.22 (推奨) 変更 レスポンシブ動作シミュレーション

おそらくWeb環境(管理画面設定)とSSH環境(コマンドライン)のPHPバージョンは別々に管理されているよう

なのでphpコマンドの設定を確認する必要がありそう

binディレクトリ(実行ファイルがいろいろある)

binディレクトリとは bin = binary 実行可能なプログラムファイルが入っている場所 binディレクトリ ls cat php git npm curl コマンドとして実行できるプログラムの保管場所

ディレクトリ構成は

/ (ルートディレクトリ)
├── bin/ (システムのbin)
├── home/
│   └── yourname/ (あなたのホームディレクトリ)
│       ├── your-domain.com
│       ├── public_html
│       ├── small.php
│       ├── ssl
│       ├── xxxd
│       ├── .bash_history
│       ├── .bashrc
│       ├── .bash_profile
│       ├── .nodebrew
│       ├── .npm
│       ├── .pki
│       ├── .spamassassin
│       └── .ssh
└── ... (その他のシステムディレクトリ)

binディレクトリがどうなっているかをみてみます

PS C:\Users\username\.ssh> ssh xserver
[username@sv12345 ~]$ ls -a
.   .bash_history  .bashrc    .npm  .spamassassin  your-domain.com  small.php  xxxd
..  .bash_profile  .nodebrew  .pki  .ssh  public_html    ssl
[username@sv12345 ~]$ cd ../../bin/
[username@sv12345 bin]$ ls
Terminal Output ftpcount ftpdctl ftpmail ftpquota ftptop ftpwho funzip g++ g3topbm gapplication gawk gcc gcc-ar gcc-nm gcc-ranlib gcmakedep gcov gdbus gdk-pixbuf-query-loaders-64 my_print_defaults myisam_ftdump myisamchk myisamlog myisampack mysql mysql_convert_table_format mysql_find_rows mysql_fix_extensions mysql_install_db mysql_plugin mysql_secure_installation mysql_setpermission mysql_tzinfo_to_sql mysql_upgrade mysql_waitpid mysql_zap mysqlaccess mysqladmin php7.0 php7.0-cgi php7.1 php7.1-cgi php7.2 php7.2-cgi php7.3 php7.3-cgi php7.4 php7.4-cgi php8.0 php8.0-cgi php8.1 php8.1-cgi php8.2 php8.2-cgi php8.3 php8.3-cgi phpize rrdtool rrdupdate rspamdm rspamc rspamadm rspamadm_stats rsync psyslog-recover-qi.pl runcon rvt rview s2p sa-awl sa-check_spamd sa-compile sa-learn yuvsplittoppm yuvtoppm yuv2topam zcat zcmp zdiff zegrep zeisstopnm zfgrep zforce zgrep zip zipcloak zipcmp zipdetails zipgrep zipinfo zipmerge zipnote Commands: 150+ | Columns: 5 | Terminal: Active Responsive

phpに絞って再度確認

[username@sv12345 bin]$ ls -l php*

各PHPバージョンのシンボリックリンクが存在(先頭が l、矢印(->)あり)

  • lrwxrwxrwx 1 root root 25 9月 5 2023 php7.0 -> /opt/php-7.0.33-3/bin/php
  • lrwxrwxrwx 1 root root 25 9月 5 2023 php7.1 -> /opt/php-7.1.33-3/bin/php
  • lrwxrwxrwx 1 root root 25 9月 5 2023 php7.2 -> /opt/php-7.2.34-5/bin/php
  • lrwxrwxrwx 1 root root 25 9月 5 2023 php7.3 -> /opt/php-7.3.33-3/bin/php
  • lrwxrwxrwx 1 root root 25 9月 5 2023 php7.4 -> /opt/php-7.4.33-3/bin/php
  • lrwxrwxrwx 1 root root 25 9月 5 2023 php8.0 -> /opt/php-8.0.30/bin/php
  • lrwxrwxrwx 1 root root 25 9月 3 2024 php8.1 -> /opt/php-8.1.29/bin/php
  • lrwxrwxrwx 1 root root 25 9月 3 2024 php8.2 -> /opt/php-8.2.22/bin/php
  • lrwxrwxrwx 1 root root 25 9月 3 2024 php8.3 -> /opt/php-8.3.10/bin/php

つまり
xserverでは各PHPバージョン用のシンボリックリンクがすでに用意されているので、記事の手順を踏まなくてもphp8.3コマンドで新しいPHPが使えます。

参考記事

https://ksanhonsan.com/phpversion-change