yzbtdiy

yzbtdiy

github
bilibili

打包CentOS7 新版OpenSSH rpm

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

image

compile.sh スクリプトの実行でソースコードをコンパイルし rpm パッケージをビルド#

スクリプトのディレクトリに移動して、compile.sh を実行すると、ソースコードパッケージが展開され、openssh-rpms/el7/RPMS/x86_64 / ディレクトリに最新版の OpenSSH の rpm パッケージが生成されます。

コンパイルの進行状況はシステムのパフォーマンスによって異なります。WSL の CentOS7 を使用してパッケージングする場合、約 3 分かかります。仮想マシンの CentOS7 は割り当てられた CPU とメモリのサイズによって時間が異なります。

[root@localhost openssh-rpms]# ./pullsrc.sh

image

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

image

サーバーでの新しい OpenSSH のインストール#

注意:SSH でアップグレードサーバーにログインしている場合は、SSH 接続を切断しないでください。アップグレードが完了してから新しい SSH ウィンドウを開いて正常にログインできることを確認してから、アップグレードが完了したとみなされます。テストアップグレードサーバーは CentOS7.9 です。

インストールパッケージのコピーと古い OpenSSH のアンインストール#

まず、パッケージ化された openssh-9.8_el7.tar.gz を scp または sftp を使用してターゲットサーバーにコピーします。ここでは /opt ディレクトリにコピーし、サーバーの古いバージョンの openssh をアンインストールします。

[root@server ~]# yum remove openssh* -y

image

新しい 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

image

問題の解決#

インストール後、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

image

sshd サービスが正常に実行された後、新しい ssh 接続ウィンドウを作成し、正常にログインできるかテストします。すべてが正常であれば、アップグレードは完了です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。