0


Linux安装升级OpenSSH服务

Linux安装升级OpenSSH服务

1、安装 OpenSSH 说明

1.1 安装环境

  • 虚拟机环境虚拟机环境OpenSSH版本OpenSSL版本升级前linux CentOSOpenSSH_7.4p1OpenSSL 1.0.2k升级方案一linux CentOSOpenSSH_9.3p1OpenSSL 1.0.2k升级方案二linux CentOSOpenSSH_9.5p1OpenSSL 1.1.1k/w
  • 下载地址- openssl:https://openssl-library.org/source/old/1.1.1/- openssh:https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
  • 注意事项- 升级前务必保证虚拟机已经打快照或备份。- 注意:升级过程全程不要关闭xshell窗口!!!关闭后将无法ssh登录。- 注意:提前将openssh和openssl安装包上传到虚拟机!!!卸载ssh后将无法上传。- 注意:升级openssh后检查服务器ulimit值!!!- 此次升级以“升级方案二”为准,进行 OpenSSH 和 OpenSSL 服务的安装升级

1.2 安装准备

  • 查看当前openssh版本,并上传 openssh-9.5p1.tar.gz/opt/openssh 目录$ ssh-V# 查看Openssh版本OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
  • 为方便统一管理建议安装包统一上传至如下目录:> (1)openssh 服务:> > /opt/openssh> > > (2)openssl 服务:> > /opt/openssl>
  • 查看是否关闭selinux$ getenforce # 查看状态Disabled$ setenforce 0# 临时关闭
  • 查看相关依赖包是否安装$ rpm-qa|egrep"gcc|make|perl|zlib|zlib-devel|pam|pam-devel|openssl| "注意:安装包有差异问题不大, 只要所需的安装包存在即可, 即使未安装在后续安装openssh时, 也会提示!

2、安装 OpenSSL 服务

2.1 安装相关说明

  • 安装 OpenSSH 服务需要升级 OpenSSL 服务,否则安装过程会报错,报错信息如下:...checking for OpenSSL_version... nochecking for OpenSSL_version_num... nochecking OpenSSL library version... configure: error: OpenSSL >=1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)")
  • 注意:openssh 服务安装需要基于 openssl 服务才能安装,上述报错是由于 openssl 服务版本过低导致无法安装 openssh 服务,安装 openssh9.5p 版本会出现 openssl 版本过低提示,openssh9.3p 版本不会出现该情况!

2.2 安装前准备工作

  • 上传 openssl-1.1.1w.tar.gz 安装包至 /opt/openssl 目录下$ mkdir-p /opt/openssl$ ll -h /opt/openssl-rw-r--r-- 1 root root 9.5M 12月 1320:42 openssl-1.1.1w.tar.gz
  • 备份原有的 ssl 服务相关目录$ whereis opensslopenssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz# 备份/usr/bin/openssl目录$ mv /usr/bin/openssl /usr/bin/openssl.bak# 备份/usr/lib64/openssl目录$ mv /usr/lib64/openssl /usr/lib64/openssl.bak# 备份/usr/include/openssl目录$ mv /usr/include/openssl /usr/include/openssl.bak
  • 安装所需依赖,查看卸载原有的 openssl 服务 (如非必要,不建议卸载依赖包)$ yum -yinstall gcc make perl zlib zlib-devel pam pam-devel$ rpm-qa|grep openssl # 查看系统原有openssh包openssl-devel-1.0.2k-26.el7_9.x86_64openssl-1.0.2k-19.el7.x86_64xmlsec1-openssl-1.2.20-7.el7_4.x86_64openssl-libs-1.0.2k-19.el7.x86_64$ rpm-e--nodeps<依赖包># 卸载查询到的相关依赖包$ rpm-qa|grep openssl |xargsrpm-e--nodeps

2.3 解压安装openssl

  • 解压openssl-1.1.1w.tar.gz 安装包$ cd /opt/openssl$ tar-zxf openssl-1.1.1w.tar.gz # 解压安装包$ cd openssl-1.1.1w/$ mkdir-p /usr/local/openssl # 创建安装目录
  • 初始化,编译安装 openssl-1.1.1w 服务$ ./config --prefix=/usr/local/openssl --shared$ make&&makeinstallimage.png

2.4 安装成功后配置

  • 进行相关使用配置# 建立软连接, 替换原有的openssl$ ln-s /usr/local/openssl/bin/openssl /usr/bin/openssl$ ln-s /usr/local/openssl/include/openssl /usr/include/openssl # 检查软连接建立情况$ ls-al /usr/bin/openssllrwxrwxrwx 1 root root 3012月 2323:01 /usr/bin/openssl -> /usr/local/openssl/bin/openssl$ ls-al /usr/include/openssllrwxrwxrwx 1 root root 3412月 2323:01 /usr/include/openssl -> /usr/local/openssl/include/openssl$ ln-s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1$ ln-s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1# 添加动态链接库$ echo"/usr/local/openssl/lib">> /etc/ld.so.conf$ ldconfig # 刷新库> (1)ldconfig是一个动态链接库管理命令。> (2)主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如前介绍: lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件。> (3)缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表。> (4)ldconfig通常在系统启动时运行, 当用户安装了新的动态链接库时,就需要手动运行这个命令。
  • 查看 openssl 版本,看是否安装成功$ openssl versionOpenSSL 1.1.1w 11 Sep 2023$ openssl version -aOpenSSL 1.1.1w 11 Sep 2023built on: Thu Dec 14 06:43:25 2023 UTCplatform: linux-x86_64options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compiler: gcc -fPIC-pthread-m64 -Wa,--noexecstack -Wall-O3-DOPENSSL_USE_NODELETE-DL_ENDIAN-DOPENSSL_PIC-DOPENSSL_CPUID_OBJ-DOPENSSL_IA32_SSE2-DOPENSSL_BN_ASM_MONT-DOPENSSL_BN_ASM_MONT5-DOPENSSL_BN_ASM_GF2m-DSHA1_ASM-DSHA256_ASM-DSHA512_ASM-DKECCAK1600_ASM-DRC4_ASM-DMD5_ASM-DAESNI_ASM-DVPAES_ASM-DGHASH_ASM-DECP_NISTZ256_ASM-DX25519_ASM-DPOLY1305_ASM-DNDEBUGOPENSSLDIR: "/usr/local/openssl/ssl"ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"Seeding source: os-specific

3、安装 OpenSSH 服务

3.1 安装前准备工作

  • 上传 openssh-9.5p1.tar.gz 安装包至 /opt/openssh目录下$ mkdir-p /opt/openssh$ ll -h /opt/openssh-rw-r--r-- 1 root root 1.8M 4月 115:10 openssh-9.5p1.tar.gz
  • 备份原有的 ssh 服务相关目录# 查看ssh服务所在的目录$ whereissshssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1# 备份/etc/ssh/目录$ mv /etc/ssh/ /etc/ssh.bak# 备份/usr/bin/ssh目录$ mv /usr/bin/ssh /usr/bin/ssh.bak# 备份/usr/sbin/shhd文件$ mv /usr/sbin/sshd /usr/sbin/sshd.bak# 备份/etc/init.d/shhd文件$ mv /etc/init.d/sshd /etc/init.d/sshd.bak# 注意/etc/init.d/sshd不存在,则无需备份# /etc/pam.d/sshd.pam文件$ mv /etc/pam.d/sshd.pam /etc/pam.d/sshd.pam.bak# 注意sshd.pam不存在,则无需备份,openssh9.0之前的版本可能有该文件
  • 卸载原有的 openssh 服务$ rpm-qa|grep openssh # 查看系统原有openssh包openssh-server-7.4p1-21.el7.x86_64openssh-clients-7.4p1-21.el7.x86_64openssh-7.4p1-21.el7.x86_64$ rpm-e--nodeps<依赖包># 卸载查询到的相关依赖包$ rpm-qa|grep openssh |xargsrpm-e--nodeps# 重新查看是否卸载完全注意:若原 openssh 服务是基于源码安装的,则无需卸载;若基于 rpm 包安装,则可以执行卸载命令。
  • 在 /etc/pam.d 目录下新建 sshd 文件# 注意: 如果文件已存在则无需修改$ vim /etc/pam.d/sshd#%PAM-1.0auth required pam_sepermit.soauth substack password-authauth include postlogin# Used with polkit to reauthorize users in remote sessions-auth optional pam_reauthorize.so prepareaccount required pam_nologin.soaccount include password-authpassword include password-auth# pam_selinux.so close should be the first session rulesession required pam_selinux.so closesession required pam_loginuid.so# pam_selinux.so open should only be followed by sessions to be executed in the user contextsession required pam_selinux.so open env_paramssession required pam_namespace.sosession optional pam_keyinit.so force revokesession include password-authsession include postlogin# Used with polkit to reauthorize users in remote sessions-session optional pam_reauthorize.so prepare注意:请确认该文件是否成功创建并有内容且未出错,否则可能导致后续无法通过 ssh 远程登录

3.2 解压安装openssh

  • 解压openssh-9.5p1.tar.gz``````$ cd /opt/openssh$ tar-zxf openssh-9.5p1.tar.gz$ cd openssh-9.5p1/
  • 初始化,编译安装 openssh-9.5p1 服务# 使用默认安装目录的openssl$ ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-privsep-path=/var/lib/sshd --without-hardening# 使用指定安装目录的openssl$ ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/sshd --without-hardening# 使用指定安装目录的openssl和zlib$ ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --with-privsep-path=/var/lib/sshd --without-hardening# 编译安装$ make&&makeinstall
  • 初始化成功的信息如下:image.png
  • 安装成功的信息如下:image.png

3.2 安装成功后配置

  • 修改文件权限为600,否则会报权限错误# 修改ssh的相关秘钥文件的权限$ chmod600 /etc/ssh/ssh_host_rsa_key$ chmod600 /etc/ssh/ssh_host_ecdsa_key$ chmod600 /etc/ssh/ssh_host_ed25519_key# 二选一执行即可$ chmod600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
  • 修改允许远程登录# 修改配置文件,允许root直接登录$ echo"PasswordAuthentication yes">> /etc/ssh/sshd_config$ echo"PermitRootLogin yes">> /etc/ssh/sshd_config$ echo"UsePAM yes">> /etc/ssh/sshd_config
  • 设置sshd开机自启# ssh服务必须开机自启动,因此要进行一些设置$ cp-p /opt/openssh/openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshd$ chmod +x /etc/init.d/sshd$ chkconfig--add sshd$ chkconfig sshd on$ systemctl restart sshd$ systemctl status sshdimage.png
  • 验证查看当前的 openssh 版本$ ssh-VOpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023

4、验证 OpenSSH 服务

4.1 验证服务是否升级成功

  • 关机,重新启动虚拟机
  • 通过 SSH 远程连接虚拟机/服务器
  • 验证查看当前的 openssh 版本$ ssh-VOpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023
  • 查看sshd状态,sshd正常启动后可以重新打开一个窗口登录验证$ systemctl status sshdimage.png

4.2 编写服务升级脚本

  • 升级 OpenSSL 服务脚本#!/bin/bash# 备份原有的openssl文件echo-e"\n\033[33m 开始备份OpenSSL服务文件... \033[0m \n"mv /usr/bin/openssl /usr/bin/openssl.bakmv /usr/lib64/openssl /usr/lib64/openssl.bakmv /usr/include/openssl /usr/include/openssl.bak# 解压OpenSSL安装包echo-e"\n\033[33m 开始解压OpenSSL安装包... \033[0m \n"cd /opt/openssltar-zxvf openssl-1.1.1w.tar.gzcd openssl-1.1.1w/mkdir-p /usr/local/openssl# 编译安装OpenSSLecho-e"\n\033[33m 开始初始化、编译、安装OpenSSL服务... \033[0m \n"./config --prefix=/usr/local/openssl --sharedmake&&makeinstallif[$?-ne0];thenecho-e"\n\033[30m OpenSSL服务安装失败!!! \033[0m \n"exit1elseecho-e"\n\033[33m OpenSSL服务安装成功... \033[0m \n"fi# 进行相关使用配置echo-e"\n\033[33m 开始为OpenSSL服务进行相关配置... \033[0m \n"ln-s /usr/local/openssl/bin/openssl /usr/bin/opensslln-s /usr/local/openssl/include/openssl /usr/include/openssl ls-al /usr/bin/opensslls-al /usr/include/opensslecho"/usr/local/openssl/lib">> /etc/ld.so.confldconfig# 查看服务是否安装成功echo-e"\n\033[33m 开始检测OpenSSL服务是否安装成功... \033[0m \n"openssl version openssl version -a
  • 升级 OpenSSH 服务脚本#!/bin/bash# 备份原有的openssl文件echo-e"\n\033[33m 开始备份OpenSSH服务文件... \033[0m \n"mv /etc/ssh/ /etc/ssh.bakmv /usr/bin/ssh /usr/bin/ssh.bakmv /usr/sbin/sshd /usr/sbin/sshd.bakmv /etc/init.d/sshd /etc/init.d/sshd.bakls-h /etc/pam.d/sshd.pam# 解压OpenSSH安装包echo-e"\n\033[33m 开始解压OpenSSH安装包... \033[0m \n"cd /opt/opensshtar-zxf openssh-9.5p1.tar.gzcd openssh-9.5p1/# 编译安装OpenSSHecho-e"\n\033[33m 开始初始化、编译、安装OpenSSH服务... \033[0m \n"./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/sshd --without-hardeningmake&&makeinstallif[$?-ne0];thenecho-e"\n\033[30m OpenSSH服务安装失败!!! \033[0m \n"exit1elseecho-e"\n\033[33m OpenSSH服务安装成功... \033[0m \n"fi# 进行相关使用配置echo-e"\n\033[33m 开始为OpenSSH服务进行相关配置... \033[0m \n"ls-h /etc/pam.d/sshdif[$?-ne0];thenecho-e"\n\033[30m SSH的身份验证等相关的配置文件不存在 \033[0m \n"exit1elseecho-e"\n\033[33m SSH的身份验证等相关的配置文件存在 \033[0m \n"fichmod600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_keyecho"PasswordAuthentication yes">> /etc/ssh/sshd_configecho"PermitRootLogin yes">> /etc/ssh/sshd_configecho"UsePAM yes">> /etc/ssh/sshd_configcp-pf /opt/openssh/openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshdchmod +x /etc/init.d/sshdchkconfig--add sshdchkconfig sshd onsystemctl restart sshd# 查看服务是否安装成功echo-e"\n\033[33m 开始检测OpenSSH服务是否安装成功... \033[0m \n"ssh-Vsystemctl status sshd注意:升级前请将服务的安装包上传到指定命令目录下,先升级 OpenSSL 服务再升级 OpenSSH 服务。

5、异常处理

5.1 处理openssh的ssl版本与openssl版本不一致问题

  • 解决办法:- 方案一: 重新源码安装 openssh 并指定 openssl 的安装为重新安装的位置- 方案二: 重新编译生成rpm,安装openssl下编译的openssh rpm包
  • 环境说明:OpenSSH版本OpenSSL版本升级前OpenSSH_7.4p1OpenSSL 1.0.2k升级后OpenSSH_9.5p1OpenSSL 1.1.1k$ openssl versionOpenSSL 1.1.1k 25 Mar 2021$ ssh-VOpenSSH_9.5p1, OpenSSL 1.0.2k-fips 26 Jan 2017> 具体说明:> (1)源码安装 openssl 1.1.1k,安装成功后查看 openssl 版本> (2)查看 openssh 的 ssl 版本与 openssl 版本显示不一致
  • 重新安装 openssh 服务# 备份原有的openssl文件$ mv /etc/ssh/ /etc/ssh.bak$ cp-r /usr/bin /usr/bin.bak$ mv /usr/sbin/sshd /usr/sbin/sshd.bak$ mv /etc/init.d/sshd /etc/init.d/sshd.bak# 解压OpenSSH安装包$ cd /opt/openssh$ tar-zxvf openssh-9.5p1.tar.gz$ cd openssh-9.5p1/# 编译安装OpenSSH$ ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-privsep-path=/var/lib/sshd --without-hardening$ make&&makeinstall# 进行相关使用配置$ chmod600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key$ echo"PasswordAuthentication yes">> /etc/ssh/sshd_config$ echo"PermitRootLogin yes">> /etc/ssh/sshd_config$ echo"UsePAM yes">> /etc/ssh/sshd_config$ cp-pf /opt/openssh/openssh-9.5p1/contrib/redhat/sshd.init /etc/init.d/sshd$ chmod +x /etc/init.d/sshd$ chkconfig--add sshd$ chkconfig sshd on$ systemctl restart sshd$ systemctl status sshd
  • 查看是否安装成功# 查看服务是否安装成功$ openssl versionOpenSSL 1.1.1k 25 Mar 2021$ ssh-VOpenSSH_9.5p1, OpenSSL 1.1.1k 25 Mar 2021

5.2 处理openssl安装版本与Library版本不一致的问题

  • 解决办法:- 检查软连接建立情况,修改 openssl 的 lib 库的链接- 提升 lib 库在动态链接库 /etc/ld.so.conf 中的位置
  • 方案一:# 查看ssl版本和链接的ssl库$ openssl versionOpenSSL 1.1.1k 25 Mar 2021(Library: OpenSSL 1.1.1w 11 Sep 2023)# 查看openssl调用的lib库情况$ ldd /usr/local/openssl/bin/openssllinux-vdso.so.1 =>(0x00007ffd013ca000)libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f4b62a90000)libcrypto.so.1.1 => /usr/local/openssl/lib/libssl.so.1.1 (0x00007f4b625a8000)# 问题发现libdl.so.2 => /lib64/libdl.so.2 (0x00007f4b623a3000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4b62187000)libc.so.6 => /lib64/libc.so.6 (0x00007f4b61dc4000)libz.so.1 => /lib64/libz.so.1 (0x00007f4b61bad000)/lib64/ld-linux-x86-64.so.2 (0x00007f4b62d38000)# 查看软链接情况$ ls-l /usr/local/openssl/lib/libssl.so.1.1-rwxr-xr-x 1 root root 690110 Dec 2220:05 /usr/local/openssl/lib/libssl.so.1.1# 重新建立软链接 (也有可能是/usr/local/openssl/lib64)$ ln-sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1$ ln-sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1# 查看ssl版本和链接的ssl库$ openssl versionOpenSSL 1.1.1w 11 Sep 2023
  • 方案二:# 查看ssl版本和链接的ssl库$ openssl versionOpenSSL 1.1.1k 25 Mar 2021(Library: OpenSSL 1.1.1w 11 Sep 2023)# 将安装目录的lib库提高位置$ vim /etc/ld.so.confld.so.conf.d/*.conf/opt/openssl/openssl/lib/usr/local/lib64# 查看ssl版本和链接的ssl库$ openssl versionOpenSSL 1.1.1w 11 Sep 2023

5.3 处理openssh升级后无法登录的问题

  • 环境说明:OpenSSH版本OpenSSL版本****升级前OpenSSH_7.4p1OpenSSL 1.0.2k升级后OpenSSH_9.5p1OpenSSL 1.1.1k
  • 原因分析: 从 openssh7.x 版本升级至 openssh9.x版本可能导致 /etc/pam.d/sshd文件被覆盖或删除,升级完 openssh 服务后,记得查看该文件是否存在,否则会导致无法通过 ssh 进行远程登录,或者显示密码错误等问题。
  • 解決办法: 重新创建 sshd 文件即可$ vim /etc/pam.d/sshd#%PAM-1.0auth required pam_sepermit.soauth substack password-authauth include postlogin# Used with polkit to reauthorize users in remote sessions-auth optional pam_reauthorize.so prepareaccount required pam_nologin.soaccount include password-authpassword include password-auth# pam_selinux.so close should be the first session rulesession required pam_selinux.so closesession required pam_loginuid.so# pam_selinux.so open should only be followed by sessions to be executed in the user contextsession required pam_selinux.so open env_paramssession required pam_namespace.sosession optional pam_keyinit.so force revokesession include password-authsession include postlogin# Used with polkit to reauthorize users in remote sessions-session optional pam_reauthorize.so prepare$ systemctcl restart sshd

5.4 升级 openssl 后导致 yum 命令无法正常使用

  • 升级 openssl 至 1.1.1w 版本后使用 yum 命令出现如下情况:image.png这是因为 yum 使用的是旧版本的 OpenSSL 库,而新版本的 OpenSSL 已经安装。
  • 解决办法1: 可能是由于删除了 openssl-libs 包导致的,重新安装 openssl-libs 包$ rpm-qa|grep openssl # 查看系统原有openssh包openssl-devel-1.0.2k-26.el7_9.x86_64openssl-1.0.2k-19.el7.x86_64xmlsec1-openssl-1.2.20-7.el7_4.x86_64openssl-libs-1.0.2k-19.el7.x86_64$ rpm-e--nodeps<依赖包># 卸载查询到的相关依赖包卸载相关依赖包时,不要卸载openssl-libs-1.0.2k-19.el7.x86_64,卸载该依赖包会导致/usr/lib64/libssl.so.10被删除,从而导致 yum 命令无法使用。
标签: linux 运维 ssh

本文转载自: https://blog.csdn.net/Y94639997/article/details/141057481
版权归原作者 小黑哪有坏心思! 所有, 如有侵权,请联系我们删除。

“Linux安装升级OpenSSH服务”的评论:

还没有评论