centos7.5离线升级openssh9.9p1

127 阅读3分钟

telnet安装及启动

避免安装失败进不去服务器,可以先安装启动telnet

# 查看是否安装
rpm -qa | grep telnet
#切换到安装包目录
/data/tmp_all/telnet
#安装
rpm -Uvh *.rpm
# 启动telnet服务
systemctl start telnet.socket 

systemctl status telnet.socket 

# 本机测试
telnet localhost 23
# 用其他机子测试telnet
telnet 服务器IP 23

# 监听端口
ss -tnlp | grep 23

# 查看防火墙状态
systemctl status firewalld
# 临时开放 23 端口
firewall-cmd --zone=public --add-port=23/tcp --permanent
firewall-cmd --reload
# 或者临时关闭防火墙(仅测试用,不推荐)
#systemctl stop firewalld

# 创建临时账号
useradd testuser
passwd

安装gcc、make等

没有就安装一下 (gcc、gcc-c++、make等)

#切换到安装包目录下
yum localinstall *.rpm
# 查询
gcc --version

编译安装zlib1.3.1

tar -zxvf zlib-1.3.1.tar.gz
cd zlib-1.3.1
./configure --prefix=/usr/local/zlib-1.3.1 
make  && make install

安装perl

没有就安装一下 (perl、perl-IPC-Cmd、perl-Data-Dumper、perl-devel 等)

# 系统有yum(推荐使用,自行处理依赖)
yum localinstall *.rpm
# 安装成功查询
perl -v

编译安装OpenSSL

tar -zxvf openssl-3.5.1.tar.gz 
cd openssl-3.5.1
./config --prefix=/usr/local/openssl-3.5.1
make && make install

# 备份旧的OpenSSL,链接新OpenSSL的库文件
mv /usr/bin/openssl{,.bak}
ln -s /usr/local/openssl-3.5.1/bin/openssl /usr/bin/openssl 
ln -s /usr/local/openssl-3.5.1/include/openssl /usr/include/openssl

# 检查OpenSSL,看看依赖是否正
ldd  /usr/bin/openssl

#若有缺失项:libssl.so.3 => not found、libcrypto.so.3 => not found
#配置动态链接库,执行下面的命令。
echo "/usr/local/openssl-3.5.1/lib/" > /etc/ld.so.conf.d/openssl.conf
echo "/usr/local/openssl-3.5.1/lib64/" > /etc/ld.so.conf.d/openssl.conf

# 激活路径
ldconfig -v
ldd  /usr/bin/openssl

openssl version
# OpenSSL 3.5.1 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025)
  • 缺失项:libssl.so.3 => not found、libcrypto.so.3 => not found 在这里插入图片描述
  • 配置激活后,一切正常 在这里插入图片描述

升级openssh

# 停止OpenSSH服务,并备份
systemctl stop sshd
# 备份
mv /etc/ssh /etc/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/bin/ssh /usr/bin/ssh.bak	

# 解压编译安装
tar -zxvf openssh-9.9p1.tar.gz 
cd openssh-9.9p1/
./configure --prefix=/usr/local/openssh-9.9p1 --with-ssl-dir=/usr/local/openssl-3.5.1 --with-zlib=/usr/local/zlib-1.3.1
make -j 4
make install

# 取消原有sshd启动方式并配置新版sshd.service
ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*
cp contrib/redhat/sshd.init /etc/init.d/sshd

# 修改配置文件
vi /usr/local/openssh-9.9p1/etc/sshd_config
PermitRootLogin yes
PubkeyAuthentication yes

# 复制sshd相关文件到新目录
mkdir /etc/ssh
cp /usr/local/openssh-9.9p1/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh-9.9p1/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh-9.9p1/bin/ssh /usr/bin/ssh
cp /usr/local/openssh-9.9p1/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/openssh-9.9p1/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

# 启动sshd服务并设置开机启动
systemctl daemon-reload
systemctl start sshd && systemctl enable sshd

# 通过以下命令确认是否已设置为开机启动
chkconfig --list | grep sshd
# 检查OpenSSL是否安装成功

ssh -V

systemctl status sshd

过程中出现的部分结果说明,没有影响:

学习了解一下,所以记录下来了

sshd.service is not a native service, redirecting to /sbin/chkconfig.

  • 执行systemctl enable sshd出现如下提示:不影响。 在这里插入图片描述 说明sshd 服务不是以 systemd 的“原生服务”方式(即没有标准的 systemd unit 文件)注册的,而是以传统的 SysV init 脚本(通常在 /etc/init.d/sshd)方式存在。所以 systemctl 会自动调用 chkconfig 来管理开机启动项,这在 CentOS 7 及兼容系统上是兼容行为。
  • 可以通过以下命令确认是否已设置为开机启动
    chkconfig --list | grep sshd
    
    在这里插入图片描述 可以看到 2/3/4/5 级别是启用状态,说明开机会自动启动。

/sbin/restorecon: lstat(/etc/ssh/ssh_host_rsa_key.pub) failed: No such file or directory

在这里插入图片描述

  • 但如果有客户端强制要求用 RSA 或 DSA 主机密钥进行连接,可能会失败(现代客户端一般优先用 ECDSA 或 ED25519,DSA 已被废弃,RSA 仍较常用)

  • 如果有需要,那就自己手动生成需要的密钥:

    # 生成 RSA 主机密钥(如已存在会提示覆盖,谨慎操作:先自己备份吧)
    ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ""
    
    # 生成 DSA 主机密钥(不推荐,DSA 已不安全)
    # ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
    

本次测试涉及到的所有安装包:网盘下载