场景:在和外网隔绝的服务器上升级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
#备份更新openssl
mv /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 directory
openssl: 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.1
ln -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/zlib
make && 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 permissions
Unable 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 permissions
Unable 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 permissions
Unable to load host key: /etc/ssh/ssh_host_ed25519_key
sshd: 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
安装完成。