OpenSSH离线升级版本
场景:在和外网隔绝的服务器上升级openSSH。如果是在有网的情况下升级,可以使用yum或dnf包管理器命令升级,如果是在离线环境或者yum仓库提供的版本太低,不足以满足需求,就需要手动安装。
一、先下载安装所需的包
需要的包:openSSH、openSSL、zlib;这里下载的版本为:
openssh-10.0p1.tar.gz、openssl-1.1.1q.tar.gz、zlib-1.3.1.tar.gz
这里的openssl没有使用最新版本,因为最新版本编译过程中需要的新依赖比较多,在离线环境中编译引入一大堆依赖非常不方便,所以直接使用openssl-1.1.1q版本,当然了,版本太低也不行,如果openSSL版本过低,那就编译不了高版本的openSSH。
1、下载openSSL
下载官网地址:Downloads | OpenSSL Library
2、下载openSSh
下载官网地址:Index of /pub/OpenBSD/OpenSSH/portable/
3、下载
下载官网地址:zlib Home Site
二、上传到目标服务器后编译安装
1. 安装OpenSSL
ps: 编译安装过程中可以会报错,比如还需要其他的依赖,需要根据提示下载安装需要的依赖。
#解压文件tar -zxf openssl-1.1.1q.tar.gz -C /opt/#进入目录cd /opt/openssl-1.1.1q#编译配置openssl安装目录./config --prefix=/usr/local/openssl#安装make && make install#备份更新opensslmv /usr/bin/openssl /usr/bin/openssl_bak#复制openssl文件到/usr/bin/下cp /usr/local/openssl/bin/openssl /usr/bin/#添加动态链接库数据echo ‘/usr/local/openssl/lib64/’ >> /etc/ld.so.conf#更新动态链接库ldconfig#进行验证openssl version# 大概率会报错openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directoryopenssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
报错处理,创建软连接
# 创建软连接ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
ps: 不同版本的openssl,报错提到的 libssl.so.1.1 和 libcrypto.so.1.1 版本也不一样,需要根据实际情况替换版本,例如可能是 libssl.so.3 和 libcrypto.so.3,那么创建软连接的文件版本也得跟着变化。
# 更新链接库ldconfig# 再次验证openssl version# 验证结果:OpenSSL 1.1.1q 5 Jul 2022
openssl安装完成。
2. 安装OpenSSH
1.安装zlib,服务器无法联网,离线安装,安装包
tar -zxvf zlib-1.3.1.tar.gz -C /opt/cd /opt/zlib-1.3.1./configure --prefix=/usr/local/zlibmake && make install`
2.安装openssh
# 备份配置目录cp -r /etc/ssh /root/ssh_backup# 备份PAM配置cp /etc/pam.d/sshd /root/sshd_pam.backup#解压tar -zxvf openssh-10.0p1.tar.gz -C /opt/cd /opt/openssh-10.0p1# 配置编译相关信息./configure \\ --prefix=/usr \\ --sysconfdir=/etc/ssh \\ --with-ssl-dir=/usr/local/openssl \\ --with-zlib=/usr/local/zlib \\ --with-zlib-include=/usr/local/zlib/include## 注: --with-ssl-dir 需要对应 openssl的安装目录# 编译 安装make && make install# 查看版本ssh -V# 显示版本信息OpenSSH_10.0p2, OpenSSL 1.1.1q 5 Jul 2022# 若需要重启或启动# 重启服务sudo systemctl restart sshd# 如果服务未运行,则启动sudo systemctl start sshd
可能的报错:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0640 for \'/etc/ssh/ssh_host_rsa_key\' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.Unable to load host key \"/etc/ssh/ssh_host_rsa_key\": bad permissionsUnable to load host key: /etc/ssh/ssh_host_rsa_key@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0640 for \'/etc/ssh/ssh_host_ecdsa_key\' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.Unable to load host key \"/etc/ssh/ssh_host_ecdsa_key\": bad permissionsUnable to load host key: /etc/ssh/ssh_host_ecdsa_key@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: UNPROTECTED PRIVATE KEY FILE! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0640 for \'/etc/ssh/ssh_host_ed25519_key\' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.Unable to load host key \"/etc/ssh/ssh_host_ed25519_key\": bad permissionsUnable to load host key: /etc/ssh/ssh_host_ed25519_keysshd: no hostkeys available -- exiting.make: [check-config] Error 1 (ignored)
这个错误是由于 OpenSSH 对密钥文件的权限要求非常严格,/etc/ssh/ssh_host_rsa_key
相关文件的权限设置过于宽松(0640),而 OpenSSH 要求私钥文件必须不能被其他用户读取(通常设置为 0600)。
解决:
修复现有密钥文件的权限
# 修复现有密钥文件的权限sudo chmod 600 /etc/ssh/ssh_host_*_key
安装完成。