赞
踩
博主之前发布了红帽体系的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)
ssl版本选取两个版本,两个均选择LTS长期稳定版
openssl-1.1.1v.tar.gz:2023-8 发布 用于ubuntu18/20测试
openssl-3.0.10.tar.gz:2023-8 发布 用于ubuntu22测试
ssh版本选择最新版9.4p1
openssl-1.1.1v.tar.gz:2023-8 发布 三套系统均升级ssh最新版
Index of /pub/OpenBSD/OpenSSH/portable/
telnet安装参考博主之前的文章:
Ubuntu22-安装telnet远程 - 李宗盛 - 博客园 (cnblogs.com)
Ubuntu22-安装telnet远程_ubuntu安装telnet_明风个人技术博客的博客-CSDN博客
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 |
Ubuntu18/20系统均是升级opnessl1.1.1的最新版,在操作命令上基本一致
下面以Ubuntu18为演示
- openssl version
- which openssl
- #配置源
- 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
注意:不同版本可能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
- #下载官网安装包-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
- #如果遇到报错缺少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
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
- #挂载新的文件
- 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
Ubuntu22系统默认ssl版本为3.0版本,因此更新到最新版本3.0.10版,不更新1.1.1版本
下面以Ubuntu22为演示
- openssl version
- which openssl
- #配置源
- 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
注意:不同版本可能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
- #下载官网安装包-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
- #如果遇到报错缺少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
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
- #挂载新的文件
- 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安装过程基本一致,命令路径基本无变化
下面以Ubuntu18为演示
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/
apt-get install -y libpam0g-dev
注意: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
#根据自己需要调整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并指定路径
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
- #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
开机自启网上有很多配置方法,结合博主实测,建议是自行学习后自定义开机systemd文件
- #原版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
- #根据需要可以注释别名
上面已经安装了telnet,此时我们连接上telnet远程,暂时不使用ssh远程
- #停止老的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
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。