yzbtdiy

yzbtdiy

github
bilibili

打包CentOS7 新版OpenSSH rpm

CentOS Linux 7 的生命周期(EOL)將於 2024 年 6 月 30 日終止,目前仍然有大量伺服器使用 CentOS 7。

官方的 YUM 源中 OpenSSH 停止在 7.4 版本,每年低版本 OpenSSH 都會爆出新漏洞,需要升級最新版 OpenSSH 往往需要下載原始碼編譯安裝,但是很多內網伺服器缺少編譯環境,Github 上 boypt 大佬提供了最新版 OpenSSH 原始碼構建 rpm 包的腳本,並嵌入了新版 OpenSSL,使升級最新版 OpenSSH 變得簡單了。

生成 rpm 包#

準備打包環境#

最好在 CentOS 7 的環境中打包,可以使用 CentOS 7 的虛擬機,也可以部署 CentOS 7 的 WSL,進入 CentOS 7,執行下面的命令安裝開發工具和依賴,本次打包環境為 CentOS 7.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 的 CentOS 7 打包在 3 分鐘左右,虛擬機 CentOS 7 根據分配的 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 窗口可以正常登入後才算升級完成,測試升級伺服器為 CentOS 7.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 連接窗口,測試是否可以正常登入,一切正常則升級完成

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。