当前位置:   article > 正文

(重磅发布,一文学会乌班图ssh升级)Ubuntu-openssl和openssh升级_ubuntu openssl

ubuntu openssl

 博主之前发布了红帽体系的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

(三套系统操作命令均一致,升级前后无变化可能是因为更新源的时候自动更新了软件)

  1. #三套系统操作命令均一致
  2. #查看当前版本
  3. hostnamectl
  4. openssl version
  5. ssh -V
  6. dpkg -l | grep openssl
  7. dpkg -l | grep openssh
  8. #在线升级
  9. apt-get install openssl
  10. apt-get install openssh-server openssh-client openssh-sftp-server
  11. #离线升级、去网站下载包升级
  12. 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测试

/source/index.html

2、  ssh版本选择

ssh版本选择最新版9.4p1

openssl-1.1.1v.tar.gz:2023-8 发布 三套系统均升级ssh最新版

Index of /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)  检查当前版本和路径
  1. openssl version
  2. which openssl

b)安装依赖  
  1. #配置源
  2. cd /etc/apt/ && cp -a sources.list sources.list.bakk
  3. sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
  4. apt-get update
  5. #在线安装依赖
  6. apt-get install -y gcc build-essential manpages-dev make perl
  7. apt-get install -y zlib1g zlib1g-dev
  8. apt-get install -y libssl-dev
  9. apt-get install -y linux-libc-dev
c)  备份之前的ssl文件

注意:不同版本可能ssl路径不一样,不用在意,主要备份/usr/bin/openssl下即可

  1. #备份以前的文件
  2. #在/home下创建opensslbak作为备份文件夹
  3. mkdir -p /home/opensslbak
  4. cd /home/opensslbak
  5. ll /usr/bin/openssl
  6. ll /usr/lib/ssl
  7. ll /etc/ssl
  8. mv /usr/bin/openssl /home/opensslbak/
  9. cp -arp /usr/lib/ssl /home/opensslbak/libssl
  10. cp -arp /etc/ssl /home/opensslbak/etcssl

d)  下载openssl升级包和编译
  1. #下载官网安装包-2023-9
  2. https://www.openssl.org/source/openssl-1.1.1v.tar.gz
  3. wget https://www.openssl.org/source/openssl-1.1.1v.tar.gz --no-check-certificate
  4. #解压并编译安装
  5. tar -xzvf openssl-1.1.1v.tar.gz
  6. cd openssl-1.1.1v/
  7. ./config --shared zlib
  8. make && make install

e)  编译如果报错
  1. #如果遇到报错缺少xxx.h,请重新安装依赖
  2. #crypto/comp/c_zlib.c:35:11: fatal error: zlib.h: No such file or directory
  3. apt install --reinstall 软件包名
  4. 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】

  1. #查看以前系统的ssl依赖文件夹
  2. ls /usr/include/openssl
  3. ls /usr/lib
  4. #查看ssl新生成依赖文件夹
  5. ls /usr/local/bin/openssl
  6. ls /usr/local/include/openssl
  7. ls /usr/local/ssl
  8. ls /usr/local/lib/
  9. find / -name 'libssl.so'
  10. find / -name 'libcrypto.so'
  11. find / -name 'libssl.so.1.1'
  12. find / -name 'libcrypto.so.1.1'
  13. ll /usr/local/lib/libssl.so
  14. ll /usr/local/lib/libcrypto.so
  15. ll /usr/local/lib/libssl.so.1.1
  16. ll /usr/local/lib/libcrypto.so.1.1
  17. #测试新命令可能会报错,稍后更新下库依赖路径ldconfig后就正常了
  18. /usr/local/bin/openssl version
  19. #root@ubuntu18:/# /usr/local/bin/openssl version
  20. #/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)  重新挂载依赖库和命令文件
  1. #挂载新的文件
  2. ln -s /usr/local/bin/openssl /usr/bin/openssl
  3. mv /usr/include/openssl /usr/include/opensslold
  4. ln -s /usr/local/include/openssl /usr/include/openssl
  5. ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so
  6. ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
  7. ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so
  8. ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
  9. #写入新的依赖库路径
  10. echo "/usr/local/lib" >> /etc/ld.so.conf
  11. echo "/usr/lib" >> /etc/ld.so.conf
  12. ldconfig
  13. ldconfig -v
  14. #手动调整成新生成的依赖库路径
  15. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
  16. echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib" >> ~/.bashrc
  17. echo $LD_LIBRARY_PATH
  18. #测试是否正常更新
  19. bash
  20. openssl version
  21. OpenSSL 1.1.1v 1 Aug 2023

2、  Ubuntu22更新openssl

Ubuntu22系统默认ssl版本为3.0版本,因此更新到最新版本3.0.10版,不更新1.1.1版本

下面以Ubuntu22为演示

a)  检查当前版本和路径
  1. openssl version
  2. which openssl

b) 安装依赖  
  1. #配置源
  2. cd /etc/apt/ && cp -a sources.list sources.list.bakk
  3. sed -i 's/http:\/\/.*.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
  4. apt-get update
  5. #在线安装依赖
  6. apt-get install -y gcc build-essential manpages-dev make perl
  7. apt-get install -y zlib1g zlib1g-dev
  8. apt-get install -y libssl-dev
  9. apt-get install -y linux-libc-dev
  10. #libidn11-dev libidn11
  11. #libcrypt-dev libcrypt1
c)  备份之前的ssl文件

注意:不同版本可能ssl路径不一样,不用在意,主要备份/usr/bin/openssl下即可

  1. #备份以前的文件
  2. #在/home下创建opensslbak作为备份文件夹
  3. mkdir -p /home/opensslbak
  4. cd /home/opensslbak
  5. ll /usr/bin/openssl
  6. ll /usr/lib/ssl
  7. ll /etc/ssl
  8. mv /usr/bin/openssl /home/opensslbak/
  9. cp -arp /usr/lib/ssl /home/opensslbak/libssl
  10. cp -arp /etc/ssl /home/opensslbak/etcssl

d)  下载openssl升级包和编译
  1. #下载官网安装包-2023-9
  2. https://www.openssl.org/source/openssl-3.0.10.tar.gz
  3. wget https://www.openssl.org/source/openssl-3.0.10.tar.gz --no-check-certificate
  4. #解压并编译安装
  5. tar -xzvf openssl-3.0.10.tar.gz
  6. cd openssl-3.0.10/
  7. ./config --shared zlib
  8. make && make install

e)  编译如果报错
  1. #如果遇到报错缺少xxx.h,请重新安装依赖
  2. #crypto/comp/c_zlib.c:35:11: fatal error: zlib.h: No such file or directory
  3. apt install --reinstall 软件包名
  4. 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】

  1. #查看以前系统的ssl依赖文件夹
  2. ls /usr/include/openssl
  3. ls /usr/lib
  4. ls /usr/lib64
  5. #查看ssl新生成依赖文件夹
  6. find / -name 'libssl.so'
  7. find / -name 'libcrypto.so'
  8. find / -name 'libssl.so.1.1'
  9. find / -name 'libcrypto.so.1.1'
  10. ls /usr/local/bin/openssl
  11. ls /usr/local/include/openssl
  12. ls /usr/local/ssl
  13. ls /usr/local/lib64
  14. ll /usr/local/lib64/libssl.so
  15. ll /usr/local/lib64/libcrypto.so
  16. ll /usr/local/lib64/libssl.so.3
  17. ll /usr/local/lib64/libcrypto.so.3
  18. #测试新命令可能会报错,稍后更新下库依赖路径ldconfig后就正常了
  19. /usr/local/bin/openssl version
  20. #root@ubuntu18:/# /usr/local/bin/openssl version
  21. #/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)  重新挂载依赖库和命令文件
  1. #挂载新的文件
  2. ln -s /usr/local/bin/openssl /usr/bin/openssl
  3. mv /usr/include/openssl /usr/include/opensslold
  4. ln -s /usr/local/include/openssl /usr/include/openssl
  5. ln -s /usr/local/lib64/libssl.so. /usr/lib/libssl.so
  6. ln -s /usr/local/lib64/libssl.so.3 /usr/lib/libssl.so.3
  7. ln -s /usr/local/lib64/libcrypto.so /usr/lib/libcrypto.so
  8. ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3
  9. #写入新的依赖库路径
  10. echo "/usr/local/lib64" >> /etc/ld.so.conf
  11. echo "/usr/lib" >> /etc/ld.so.conf
  12. ldconfig
  13. ldconfig -v
  14. #手动调整成新生成的依赖库路径
  15. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
  16. echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64" >> ~/.bashrc
  17. echo $LD_LIBRARY_PATH
  18. #测试是否正常更新
  19. bash
  20. openssl version
  21. 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/

  1. cd /home/
  2. wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz --no-check-certificate
  3. tar xfz openssh-9.4p1.tar.gz
  4. chown -R root:root openssh-9.4p1
  5. cd ./openssh-9.4p1
  6. #备份ssh文件夹
  7. mkdir -pv /home/sshbak
  8. cp -arp /etc/ssh/ /home/sshbak/ssh
  9. cp /etc/ssh/sshd_config /home/sshbak/sshd_config.backup
  10. cp /etc/pam.d/sshd /home/sshbak/sshd.pambackup
  11. cp /etc/init.d/ssh /home/sshbak/ssh.old
  12. mv /etc/ssh /etc/ssholdbak
  13. 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

  1. cd ./openssh-9.4p1
  2. ./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
  3. #./configure
  4. #--prefix=/usr
  5. #--sysconfdir=/etc/ssh #编译后ssh路径
  6. #--with-openssl-includes=/usr/local/include/openssl #有很多xxx.h的文件目录
  7. #--with-ssl-dir=/usr/local/lib64 #有xxx.so的目录
  8. #--with-zlib
  9. #--with-md5-passwords
  10. #--with-pam
  11. #--with-privsep-path=/var/lib/sshd
  12. make && make install
  13. #升级完成
  14. 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
  1. #mv /usr/bin/ssh-copy-id /home/sshbak/
  2. cd /home/openssh-9.4p1
  3. install -v -m755 contrib/ssh-copy-id /usr/bin
  4. ll /usr/bin/ssh-copy-id

七、  升级后配置openssh开机自启

开机自启网上有很多配置方法,结合博主实测,建议是自行学习后自定义开机systemd文件

1、  查看原版开机自启服务配置,新建一个服务配置

  1. #原版ssh自启配置
  2. cat /lib/systemd/system/ssh.service
  3. [Unit]
  4. Description=OpenBSD Secure Shell server
  5. Documentation=man:sshd(8) man:sshd_config(5)
  6. After=network.target auditd.service
  7. ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
  8. [Service]
  9. EnvironmentFile=-/etc/default/ssh
  10. ExecStartPre=/usr/sbin/sshd -t
  11. ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
  12. ExecReload=/usr/sbin/sshd -t
  13. ExecReload=/bin/kill -HUP $MAINPID
  14. KillMode=process
  15. Restart=on-failure
  16. RestartPreventExitStatus=255
  17. Type=notify
  18. RuntimeDirectory=sshd
  19. RuntimeDirectoryMode=0755
  20. [Install]
  21. WantedBy=multi-user.target
  22. Alias=sshd.service

复制原版的配置,新建ssh9的开机自启文件,并修改【Type=simple】

  1. #修改脚本启动类型为simple,防止启动通知服务过程卡死
  2. cp /lib/systemd/system/ssh.service /lib/systemd/system/ssh9.service
  3. vim /lib/systemd/system/ssh9.service
  4. [Service]
  5. #类型修改Type=forking为simple,防止启动通知服务过程卡死
  6. Type=simple
  7. #Alias=sshd.service
  8. #根据需要可以注释别名

2、  连接telnet远程,防止ssh异常故障

上面已经安装了telnet,此时我们连接上telnet远程,暂时不使用ssh远程

3、  修改服务文件,生成systemd托管服务

  1. #停止老的ssh服务
  2. systemctl daemon-reload
  3. systemctl stop ssh
  4. systemctl disable ssh
  5. systemctl unmask ssh
  6. systemctl status ssh
  7. #启用新的ssh服务
  8. systemctl daemon-reload
  9. systemctl restart ssh9
  10. systemctl status ssh9
  11. systemctl enable ssh9
  12. #查询配置是否成功
  13. systemctl list-unit-files | grep ssh

4、  这个时候已经升级完成,可以连接测试了

5、  补充:自定义ssh的开机自启文件

  1. vim /usr/lib/systemd/system/sshdnew.service
  2. [Unit]
  3. Description=OpenSSH server daemon
  4. Documentation=man:sshd(8) man:sshd_config(5)
  5. After=network.target
  6. [Service]
  7. Type=simple
  8. ExecStart=/usr/sbin/sshd -D
  9. KillMode=process
  10. Restart=on-failure
  11. RestartSec=42s
  12. [Install]
  13. WantedBy=multi-user.target

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/853571
推荐阅读
相关标签
  

闽ICP备14008679号