CentOS Linux 7 のライフサイクル(EOL)は 2024 年 6 月 30 日に終了しますが、現在も多くのサーバーで CentOS7 が使用されています。
公式の YUM リポジトリでは、OpenSSH は 7.4 バージョンで停止しています。低いバージョンの OpenSSH では毎年新しい脆弱性が発見されるため、最新版の OpenSSH にアップグレードするにはソースコードをダウンロードしてコンパイルする必要がありますが、多くの内部サーバーにはコンパイル環境が不足しています。GitHub のboyptさんが最新版の OpenSSH のソースコードをビルドして rpm パッケージに組み込んだスクリプトを提供しており、最新版の OpenSSH のアップグレードが簡単になりました。
rpm パッケージの生成#
パッケージング環境の準備#
CentOS7 の環境でパッケージングすることをおすすめします。CentOS7 の仮想マシンを使用するか、CentOS7 の WSL をデプロイしてください。CentOS7 に入り、以下のコマンドを実行して開発ツールと依存関係をインストールします。今回のパッケージング環境は CentOS7.9 です。
yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl perl-IPC-Cmd
パッケージングスクリプトのダウンロード#
スクリプトを git clone で取得するか、GitHub から zip をダウンロードして解凍することができます。ここでは git を使用します。
git clone https://github.com/boypt/openssh-rpms.git
pullsrc.sh スクリプトの実行でソースコードをダウンロード#
スクリプトのディレクトリに移動して、pullsrc.sh を実行すると、自動的に最新版の OpenSSH、OpenSSL、x11-ssh-askpass のソースコードファイルがダウンロードされます。
ダウンロードが完了すると、openssh-rpms/downloads ディレクトリに保存されます。openssh-rpms は前のステップでダウンロードしたスクリプトのディレクトリです。
[root@localhost ~]# cd openssh-rpms/
[root@localhost openssh-rpms]# ./pullsrc.sh
compile.sh スクリプトの実行でソースコードをコンパイルし rpm パッケージをビルド#
スクリプトのディレクトリに移動して、compile.sh を実行すると、ソースコードパッケージが展開され、openssh-rpms/el7/RPMS/x86_64 / ディレクトリに最新版の OpenSSH の rpm パッケージが生成されます。
コンパイルの進行状況はシステムのパフォーマンスによって異なります。WSL の CentOS7 を使用してパッケージングする場合、約 3 分かかります。仮想マシンの CentOS7 は割り当てられた CPU とメモリのサイズによって時間が異なります。
[root@localhost openssh-rpms]# ./pullsrc.sh
rpm のアーカイブ#
rpm のビルドが完了したら、tar を使用して 4 つの rpm パッケージを.tar.gz ファイルに圧縮し、SSH をアップグレードする必要がある CentOS のサーバーにコピーして解凍してインストールします。
[root@localhost openssh-rpms]# cd el7/RPMS/x86_64/
[root@localhost x86_64]# tar czvf openssh-9.8_el7.tar.gz openssh*.rpm
サーバーでの新しい OpenSSH のインストール#
注意:SSH でアップグレードサーバーにログインしている場合は、SSH 接続を切断しないでください。アップグレードが完了してから新しい SSH ウィンドウを開いて正常にログインできることを確認してから、アップグレードが完了したとみなされます。テストアップグレードサーバーは CentOS7.9 です。
インストールパッケージのコピーと古い OpenSSH のアンインストール#
まず、パッケージ化された openssh-9.8_el7.tar.gz を scp または sftp を使用してターゲットサーバーにコピーします。ここでは /opt ディレクトリにコピーし、サーバーの古いバージョンの openssh をアンインストールします。
[root@server ~]# yum remove openssh* -y
新しい OpenSSH のインストール#
/opt ディレクトリに移動し、openssh-9.8_el7.tar.gz を展開し、rpm コマンドを使用してインストールします。
[root@server ~]# cd /opt
[root@server opt]# tar xf openssh-9.8_el7.tar.gz
[root@server opt]# rpm -ivh openssh*.rpm
問題の解決#
インストール後、sshd を再起動するとエラーが発生します。エラーメッセージを確認すると、/etc/ssh/ssh_host_ed25519_key
ファイルのパーミッションが 0640 であるためエラーが発生していることがわかります。ssh_host_*_key ファイルのパーミッションを変更してから sshd を再起動します。
[root@server opt]# chmod 0600 /etc/ssh/ssh_host_*_key
[root@server opt]# systemctl restart sshd
sshd サービスが正常に実行された後、新しい ssh 接続ウィンドウを作成し、正常にログインできるかテストします。すべてが正常であれば、アップグレードは完了です。