如何編譯打包OpenSSH 9.4并實(shí)現(xiàn)批量升級(jí)
1 介紹
openssh 9.4版本已于8月10號(hào)發(fā)布,安全團(tuán)隊(duì)又催著要趕緊升級(jí)環(huán)境里的ssh版本,本文主要介紹Centos5、Centos6、Centos7下openssh 9.4源碼編譯rpm包以及批量升級(jí)服務(wù)器openssh版本的方法。關(guān)注公眾號(hào)后臺(tái)回復(fù)ssh可獲取本文相關(guān)源碼文件。
https://www.openssh.com/releasenotes.html
2 將源碼編譯為rpm包
2.1 編譯腳本介紹
由于openssh官方只提供源碼包,網(wǎng)上下載的rpm包有可能遇到各種依賴(lài)問(wèn)題,因此我們選擇自己將源碼編譯為rpm包來(lái)升級(jí)環(huán)境的openssh。當(dāng)然編譯過(guò)程也盡量簡(jiǎn)單化,這里我們直接使用開(kāi)源的腳本進(jìn)行編譯。
https://github.com/boypt/openssh-rpms
編譯需要涉及到很多開(kāi)發(fā)軟件的下載安裝,建議使用一臺(tái)虛擬機(jī)來(lái)進(jìn)行操作。先下載編譯腳本,解壓
[root@etcd-1 ~]# wget https://github.com/boypt/openssh-rpms/archive/refs/heads/main.zip
[root@etcd-1 ~]# unzip main.zip
[root@etcd-1 ~]# cd openssh-rpms-main/
簡(jiǎn)單看下代碼結(jié)構(gòu)
- compile.sh:編譯腳本
- el5、el6、el7:對(duì)應(yīng)CentOS5、6、7三個(gè)系統(tǒng),編譯相關(guān)的參數(shù)由SPECS目錄下的openssh.spec控制。編譯好的rpm包放在RPMS目錄下。
- pullsrc.sh:openssh相關(guān)源碼下載腳本
- version.env:定義了openssh及openssl源碼的版本信息
2.2 修改代碼
先修改一下pullsrc.sh腳本,給wget添加上"--no-check-certificate"參數(shù),否則可能因?yàn)樽C書(shū)問(wèn)題導(dǎo)致源碼下載失敗。
另外默認(rèn)openssh源碼中是沒(méi)有ssh-copy-id相關(guān)參數(shù)的,如果直接編譯安裝,會(huì)發(fā)現(xiàn)安裝后沒(méi)有ssh-copy-id命令,因此如果需要用到該命令,需要修改編譯參數(shù)控制文件openssh.spec。本次要升級(jí)的環(huán)境為CentOS7,因此我只修改el7目錄下的SPECS/openssh.speec文件,在如下位置添加一行。
install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id
繼續(xù)修改el7目錄下的SPECS/openssh.speec文件,在如下位置添加一行。
%attr(0755,root,root) %{_bindir}/ssh-copy-id
2.3 準(zhǔn)備編譯環(huán)境
[root@etcd-1 openssh-rpms-main]# yum groupinstall -y "Development Tools"
[root@etcd-1 openssh-rpms-main]# yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel
2.4 拉取源碼并編譯打包
[root@etcd-1 openssh-rpms-main]# bash pullsrc.sh ##拉去源碼包
執(zhí)行完成后檢查下download目錄,相關(guān)的源碼包是否已下載好,服務(wù)器沒(méi)有網(wǎng)絡(luò),可以從下面的鏈接直接下載好傳到download目錄下。
https://www.openssl.org/source//openssl-1.1.1v.tar.gz
https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
執(zhí)行源碼打包腳本
[root@etcd-1 openssh-rpms-main]# bash compile.sh
編譯完成檢查編譯是否成功
檢查rpm包是否都以打包好
3 批量升級(jí)服務(wù)器openssh版本至9.4
3.1 腳本介紹
腳本會(huì)用到ansible,因此執(zhí)行腳本的服務(wù)器上需要安裝ansible。獲取到腳本后,先解壓
[root@172-20-17-60 ~]# tar xvf ssh_9.4.tar.gz
[root@172-20-17-60 ~]# cd ssh_9.4
腳本主要文件如下
- hosts: ansible主機(jī)清單文件,填寫(xiě)待升級(jí)ssh版本的服務(wù)器ip及用戶(hù)名密碼
- rpms:存放待升級(jí)的openssh相關(guān)的rpm包。可以將前面編譯好的openssh包放入該路徑下
- ssh_update.sh:ssh升級(jí)腳本,將會(huì)推送到各個(gè)服務(wù)器
- ssh_update.yaml:升級(jí)時(shí)ansible使用的playbook
- update_ssh.sh:主腳本,通過(guò)該腳本來(lái)執(zhí)行ansible的playbook
3.2 自定待升級(jí)服務(wù)器信息
node1為主機(jī)組,主機(jī)組下填寫(xiě)服務(wù)器ip,服務(wù)器用戶(hù)名密碼相同的,可以填在一起
- ansible_user:填寫(xiě)用戶(hù)名
- ansible_ssh_pass:填寫(xiě)登錄密碼
如果用其它用戶(hù)名或密碼不同的服務(wù)器,可以填寫(xiě)到主機(jī)組node2下,并可新增其它主機(jī)組
3.3 執(zhí)行腳本,開(kāi)始升級(jí)openssh版本
[root@172-20-17-60 ssh_9.4]# bash update_ssh.sh
檢查ssh版本是否已升級(jí)完成
服務(wù)上檢查openssh是否成功升級(jí)到9.4版本
檢查ssh是否能正常登錄到服務(wù)器
浙公網(wǎng)安備 33010602011771號(hào)