博主之前發佈了紅帽體系的Centos7關於openssl和openssh的升級操作;本文就Ubuntu系統再次分享和交流ssh的升級。如有不正確,歡迎在評論區指出。 之前博主的相關文章: openssh-淺談openssl和openssh的升級 - 李宗盛 - 博客園 (cnblogs.com) o ...
博主之前發佈了紅帽體系的Centos7關於openssl和openssh的升級操作;本文就Ubuntu系統再次分享和交流ssh的升級。如有不正確,歡迎在評論區指出。
之前博主的相關文章:
openssh-淺談openssl和openssh的升級 - 李宗盛 - 博客園 (cnblogs.com)
openssh-淺談openssl和openssh的升級_升級openssl需要升級openssh嗎_明風個人技術博客的博客-CSDN博客
linux科普:如何標準的安裝和升級軟體 - 李宗盛 - 博客園 (cnblogs.com)
linux科普:如何標準的安裝和升級軟體_linux升級軟體_明風個人技術博客的博客-CSDN博客
Ubuntu22-安裝telnet遠程 - 李宗盛 - 博客園 (cnblogs.com)
Ubuntu22-安裝telnet遠程_ubuntu安裝telnet_明風個人技術博客的博客-CSDN博客
一、 前言和環境準備
Ubutu系統是目前主流Linux系統之一,命令跟Debian類似一套體系,版本分為伺服器版和桌面版。目前各公司在生產環境多使用伺服器版,版本號多使用18\20\22等server版本。本文將會安裝3個版本進行實操分享,均升級至ssh新版。
系統 |
版本 |
網路 |
備註 |
Ubuntu-18.04.6-LTS |
server |
有互聯網 |
虛擬機 |
Ubuntu-20.04.6-LTS |
server |
有互聯網 |
虛擬機 |
Ubuntu-22.04.1-LTS |
server |
有互聯網 |
虛擬機 |
二、 標準升級方法
標準升級就是使用系統源自動更新最新版本,首先測試直接使用線上源進行升級
測試時間2023-9
系統 |
升級方法 |
升級前版本 |
升級後版本 |
Ubuntu-18.04.6-LTS |
apt線上源更新 |
OpenSSL 1.1.1 OpenSSH_7.6p1 |
OpenSSL 1.1.1 OpenSSH_7.6p1 |
Ubuntu-20.04.6-LTS |
apt線上源更新 |
OpenSSL 1.1.1f OpenSSH_8.2p1 |
OpenSSL 1.1.1f OpenSSH_8.2p1 |
Ubuntu-22.04.1-LTS |
apt線上源更新 |
OpenSSL 3.0.2 OpenSSH_8.9p1 |
OpenSSL 3.0.2 OpenSSH_8.9p1 |
(三套系統操作命令均一致,升級前後無變化可能是因為更新源的時候自動更新了軟體)
#三套系統操作命令均一致 #查看當前版本 hostnamectl openssl version ssh -V dpkg -l | grep openssl dpkg -l | grep openssh #線上升級 apt-get install openssl apt-get install openssh-server openssh-client openssh-sftp-server #離線升級、去網站下載包升級 https://packages.ubuntu.com/
三、 手動下載編譯包進行升級
壓縮包編譯安裝是linux系統下軟體更新的第二種常用方式,軟體廠家只需要提供壓縮包的源碼或者編譯程式,適配各系統由用戶自行編譯,適合於各類系統安裝升級
(測試時間2023-9)
1、 ssl版本選擇
ssl版本選取兩個版本,兩個均選擇LTS長期穩定版
openssl-1.1.1v.tar.gz:2023-8 發佈 用於ubuntu18/20測試
openssl-3.0.10.tar.gz:2023-8 發佈 用於ubuntu22測試
https://www.openssl.org/source/
2、 ssh版本選擇
ssh版本選擇最新版9.4p1
openssl-1.1.1v.tar.gz:2023-8 發佈 三套系統均升級ssh最新版
https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
四、 安裝telnet,防止ssh升級錯誤無法連接遠程
telnet安裝參考博主之前的文章:
Ubuntu22-安裝telnet遠程 - 李宗盛 - 博客園 (cnblogs.com)
Ubuntu22-安裝telnet遠程_ubuntu安裝telnet_明風個人技術博客的博客-CSDN博客
五、 先編譯更新openssl
openssl和openssh相互依賴,更新ssh需要先更新opnenssl
系統 |
升級方法 |
升級前版本 |
升級後版本 |
Ubuntu-18.04.6-LTS |
編譯更新 |
OpenSSL 1.1.1 |
OpenSSL 1.1.1v |
Ubuntu-20.04.6-LTS |
編譯更新 |
OpenSSL 1.1.1f |
OpenSSL 1.1.1v |
Ubuntu-22.04.1-LTS |
編譯更新 |
OpenSSL 3.0.2 |
OpenSSL 3.0.10 |
1、 Ubuntu18/20更新openssl
Ubuntu18/20系統均是升級opnessl1.1.1的最新版,在操作命令上基本一致
下麵以Ubuntu18為演示
a) 檢查當前版本和路徑
openssl version
which openssl
b)安裝依賴
#配置源 cd /etc/apt/ && cp -a sources.list sources.list.bakk sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list apt-get update #線上安裝依賴 apt-get install -y gcc build-essential manpages-dev make perl apt-get install -y zlib1g zlib1g-dev apt-get install -y libssl-dev apt-get install -y linux-libc-dev
c) 備份之前的ssl文件
註意:不同版本可能ssl路徑不一樣,不用在意,主要備份/usr/bin/openssl下即可
#備份以前的文件 #在/home下創建opensslbak作為備份文件夾 mkdir -p /home/opensslbak cd /home/opensslbak ll /usr/bin/openssl ll /usr/lib/ssl ll /etc/ssl mv /usr/bin/openssl /home/opensslbak/ cp -arp /usr/lib/ssl /home/opensslbak/libssl cp -arp /etc/ssl /home/opensslbak/etcssl
d) 下載openssl升級包和編譯
#下載官網安裝包-2023-9 https://www.openssl.org/source/openssl-1.1.1v.tar.gz wget https://www.openssl.org/source/openssl-1.1.1v.tar.gz --no-check-certificate #解壓並編譯安裝 tar -xzvf openssl-1.1.1v.tar.gz cd openssl-1.1.1v/ ./config --shared zlib make && make install
e) 編譯如果報錯
#如果遇到報錯缺少xxx.h,請重新安裝依賴 #crypto/comp/c_zlib.c:35:11: fatal error: zlib.h: No such file or directory apt install --reinstall 軟體包名 apt-get install --reinstall linux-libc-dev
f) 編譯後查看新生成文件夾和測試命令
openssl編譯安裝後,會需要用到兩個文件夾,做程式依賴
● 一個是有很多xxx.h的文件夾,一般升級後預設在【/usr/local/include/openssl】,它對應系統以前的【/usr/include/openssl】
● 另一個是有libssl.so的文件夾,一般升級後預設在【/usr/local/lib】或者【/usr/local/lib64】;它對應系統以前的【/urs/lib】或者【/usr/lib64】
#查看以前系統的ssl依賴文件夾 ls /usr/include/openssl ls /usr/lib #查看ssl新生成依賴文件夾 ls /usr/local/bin/openssl ls /usr/local/include/openssl ls /usr/local/ssl ls /usr/local/lib/ find / -name 'libssl.so' find / -name 'libcrypto.so' find / -name 'libssl.so.1.1' find / -name 'libcrypto.so.1.1' ll /usr/local/lib/libssl.so ll /usr/local/lib/libcrypto.so ll /usr/local/lib/libssl.so.1.1 ll /usr/local/lib/libcrypto.so.1.1 #測試新命令可能會報錯,稍後更新下庫依賴路徑ldconfig後就正常了 /usr/local/bin/openssl version #root@ubuntu18:/# /usr/local/bin/openssl version #/usr/local/bin/openssl: relocation error: /usr/local/bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference
g) 重新掛載依賴庫和命令文件
#掛載新的文件 ln -s /usr/local/bin/openssl /usr/bin/openssl mv /usr/include/openssl /usr/include/opensslold ln -s /usr/local/include/openssl /usr/include/openssl ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 #寫入新的依賴庫路徑 echo "/usr/local/lib" >> /etc/ld.so.conf echo "/usr/lib" >> /etc/ld.so.conf ldconfig ldconfig -v #手動調整成新生成的依賴庫路徑 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib" >> ~/.bashrc echo $LD_LIBRARY_PATH #測試是否正常更新 bash openssl version OpenSSL 1.1.1v 1 Aug 2023
2、 Ubuntu22更新openssl
Ubuntu22系統預設ssl版本為3.0版本,因此更新到最新版本3.0.10版,不更新1.1.1版本
下麵以Ubuntu22為演示
a) 檢查當前版本和路徑
openssl version
which openssl
b) 安裝依賴
#配置源 cd /etc/apt/ && cp -a sources.list sources.list.bakk sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list apt-get update #線上安裝依賴 apt-get install -y gcc build-essential manpages-dev make perl apt-get install -y zlib1g zlib1g-dev apt-get install -y libssl-dev apt-get install -y linux-libc-dev #libidn11-dev libidn11 #libcrypt-dev libcrypt1
c) 備份之前的ssl文件
註意:不同版本可能ssl路徑不一樣,不用在意,主要備份/usr/bin/openssl下即可
#備份以前的文件 #在/home下創建opensslbak作為備份文件夾 mkdir -p /home/opensslbak cd /home/opensslbak ll /usr/bin/openssl ll /usr/lib/ssl ll /etc/ssl mv /usr/bin/openssl /home/opensslbak/ cp -arp /usr/lib/ssl /home/opensslbak/libssl cp -arp /etc/ssl /home/opensslbak/etcssl
d) 下載openssl升級包和編譯
#下載官網安裝包-2023-9 https://www.openssl.org/source/openssl-3.0.10.tar.gz wget https://www.openssl.org/source/openssl-3.0.10.tar.gz --no-check-certificate #解壓並編譯安裝 tar -xzvf openssl-3.0.10.tar.gz cd openssl-3.0.10/ ./config --shared zlib make && make install
e) 編譯如果報錯
#如果遇到報錯缺少xxx.h,請重新安裝依賴 #crypto/comp/c_zlib.c:35:11: fatal error: zlib.h: No such file or directory apt install --reinstall 軟體包名 apt-get install --reinstall linux-libc-dev
f) 編譯後查看新生成文件夾和測試命令
openssl編譯安裝後,會需要用到兩個文件夾,做程式依賴
● 一個是有很多xxx.h的文件夾,一般升級後預設在【/usr/local/include/openssl】,它對應系統以前的【/usr/include/openssl】
● 另一個是有libssl.so的文件夾,一般升級後預設在【/usr/local/lib】或者【/usr/local/lib64】;它對應系統以前的【/urs/lib】或者【/usr/lib64】
#查看以前系統的ssl依賴文件夾 ls /usr/include/openssl ls /usr/lib ls /usr/lib64 #查看ssl新生成依賴文件夾 find / -name 'libssl.so' find / -name 'libcrypto.so' find / -name 'libssl.so.1.1' find / -name 'libcrypto.so.1.1' ls /usr/local/bin/openssl ls /usr/local/include/openssl ls /usr/local/ssl ls /usr/local/lib64 ll /usr/local/lib64/libssl.so ll /usr/local/lib64/libcrypto.so ll /usr/local/lib64/libssl.so.3 ll /usr/local/lib64/libcrypto.so.3 #測試新命令可能會報錯,稍後更新下庫依賴路徑ldconfig後就正常了 /usr/local/bin/openssl version #root@ubuntu18:/# /usr/local/bin/openssl version #/usr/local/bin/openssl: relocation error: /usr/local/bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference
g) 重新掛載依賴庫和命令文件
#掛載新的文件 ln -s /usr/local/bin/openssl /usr/bin/openssl mv /usr/include/openssl /usr/include/opensslold ln -s /usr/local/include/openssl /usr/include/openssl ln -s /usr/local/lib64/libssl.so. /usr/lib/libssl.so ln -s /usr/local/lib64/libssl.so.3 /usr/lib/libssl.so.3 ln -s /usr/local/lib64/libcrypto.so /usr/lib/libcrypto.so ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3 #寫入新的依賴庫路徑 echo "/usr/local/lib64" >> /etc/ld.so.conf echo "/usr/lib" >> /etc/ld.so.conf ldconfig ldconfig -v #手動調整成新生成的依賴庫路徑 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64 echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64" >> ~/.bashrc echo $LD_LIBRARY_PATH #測試是否正常更新 bash openssl version OpenSSL 3.0.10 1 Aug 2023 (Library: OpenSSL 3.0.10 1 Aug 2023)
六、 編譯升級openssh
三套系統openssh安裝過程基本一致,命令路徑基本無變化
下麵以Ubuntu18為演示
1、 Ubuntu18/20/22更新openssh
a) 下載新版和備份老的ssh文件
Index of /pub/OpenBSD/OpenSSH/portable/
cd /home/ wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz --no-check-certificate tar xfz openssh-9.4p1.tar.gz chown -R root:root openssh-9.4p1 cd ./openssh-9.4p1 #備份ssh文件夾 mkdir -pv /home/sshbak cp -arp /etc/ssh/ /home/sshbak/ssh cp /etc/ssh/sshd_config /home/sshbak/sshd_config.backup cp /etc/pam.d/sshd /home/sshbak/sshd.pambackup cp /etc/init.d/ssh /home/sshbak/ssh.old mv /etc/ssh /etc/ssholdbak ll /home/sshbak/
b) 安裝依賴
apt-get install -y libpam0g-dev
c) 設置編譯參數和編譯安裝,註意要更新openssl後才能生效
註意:Ubuntu18/20路徑是--with-ssl-dir=/usr/local/lib,
Ubuntu22路徑是--with-ssl-dir=/usr/local/lib64
cd ./openssh-9.4p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/include/openssl --with-ssl-dir=/usr/local/lib --with-zlib --with-md5-passwords --with-pam --with-privsep-path=/var/lib/sshd #./configure #--prefix=/usr #--sysconfdir=/etc/ssh #編譯後ssh路徑 #--with-openssl-includes=/usr/local/include/openssl #有很多xxx.h的文件目錄 #--with-ssl-dir=/usr/local/lib64 #有xxx.so的目錄 #--with-zlib #--with-md5-passwords #--with-pam #--with-privsep-path=/var/lib/sshd make && make install #升級完成 ssh -V
d) 修改配置文件/etc/ssh/sshd_config,取消註釋以下文件
#根據自己需要調整sshd配置文件,參考如下 vim /etc/ssh/sshd_config 32 PermitRootLogin yes #允許root登錄,root用戶必須添加 41 AuthorizedKeysFile .ssh/authorized_keys #指定公鑰文件的保存位置以及名稱 57 PasswordAuthentication yes #允許密碼驗證 82 UsePAM yes #PAM模塊 98 UseDNS no #關閉dns檢測 109 Subsystem sftp /usr/libexec/sftp-server #開啟SFTP並指定路徑
e) 檢測文件配置測試
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
f) 添加互信命令文件ssh-copy-id
#mv /usr/bin/ssh-copy-id /home/sshbak/ cd /home/openssh-9.4p1 install -v -m755 contrib/ssh-copy-id /usr/bin ll /usr/bin/ssh-copy-id
七、 升級後配置openssh開機自啟
開機自啟網上有很多配置方法,結合博主實測,建議是自行學習後自定義開機systemd文件
1、 查看原版開機自啟服務配置,新建一個服務配置
#原版ssh自啟配置 cat /lib/systemd/system/ssh.service [Unit] Description=OpenBSD Secure Shell server Documentation=man:sshd(8) man:sshd_config(5) After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartPreventExitStatus=255 Type=notify RuntimeDirectory=sshd RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target Alias=sshd.service
複製原版的配置,新建ssh9的開機自啟文件,並修改【Type=simple】
#修改腳本啟動類型為simple,防止啟動通知服務過程卡死 cp /lib/systemd/system/ssh.service /lib/systemd/system/ssh9.service vim /lib/systemd/system/ssh9.service [Service] #類型修改Type=forking為simple,防止啟動通知服務過程卡死 Type=simple #Alias=sshd.service #根據需要可以註釋別名
2、 連接telnet遠程,防止ssh異常故障
上面已經安裝了telnet,此時我們連接上telnet遠程,暫時不使用ssh遠程
3、 修改服務文件,生成systemd托管服務
#停止老的ssh服務 systemctl daemon-reload systemctl stop ssh systemctl disable ssh systemctl unmask ssh systemctl status ssh #啟用新的ssh服務 systemctl daemon-reload systemctl restart ssh9 systemctl status ssh9 systemctl enable ssh9 #查詢配置是否成功 systemctl list-unit-files | grep ssh
4、 這個時候已經升級完成,可以連接測試了
5、 補充:自定義ssh的開機自啟文件
vim /usr/lib/systemd/system/sshdnew.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target [Service] Type=simple ExecStart=/usr/sbin/sshd -D KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
作者: 博客園-李宗盛 如果覺得博主的文章對你有幫助,麻煩動動小手、點贊、評論、您的鼓勵是我最大的動力!!! 出處: https://home.cnblogs.com/u/subsea/ 博客園主頁:https://www.cnblogs.com/subsea/ CSDN主頁:https://blog.csdn.net/SUBSEA123/