在CentOS7系统中通过源码编译升级OpenSSH10.0p1
作者 hxwsq_华 于 2024-12-05 14:25:00.0 发表于 浙江 最近修改于 2025-04-25 14:26:29.0 本文浏览量:96人次
一、说明
1.1 操作系统版本
本文使用的操作系统版本:CentOS 7.9
cat /etc/centos-release

1.2 准备工作
1.OpenSSH10.0p1源码包(下载)
2.OpenSSH10.0p1依赖于高版本的OpenSSL(OpenSSL版本 ≥ 1.1.1),OpenSSL升级方法可参考《在CentOS7系统中通过源码编译升级OpenSSL3.0.16》
二、升级步骤
【注意】升级OpenSSH版本前,如果条件允许,最好先开启系统的telnet远程服务,以防OpenSSH升级过程中SSH连接意外断开
2.1 安装所需的软件包
yum -y install gcc zlib-devel pcre-devel pam-devel rsync

2.2 备份原OpenSSH文件
---备份SSH服务的主配置目录
[[ -d /etc/ssh ]] && mv /etc/ssh /etc/ssh.bak
---备份SSH服务的二进制文件
[[ -f /usr/bin/scp ]] && mv /usr/bin/scp /usr/bin/scp.bak
[[ -f /usr/bin/sftp ]] && mv /usr/bin/sftp /usr/bin/sftp.bak
find /usr/bin -name "ssh*" | while read file; do mv $file $file.bak; done
find /usr/sbin -name "ssh*" | while read file; do mv $file $file.bak; done

2.3 获取OpenSSH源码包

2.4 编译安装OpenSSH
tar -zxf openssh-10.0p1.tar.gz
cd openssh-10.0p1 && ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-zlib --with-pam && make && make install

2.5 安装后配置
---修改/etc/ssh/sshd_config
echo "Protocol 2" >> /etc/ssh/sshd_config
echo "SyslogFacility AUTHPRIV" >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
echo "ChallengeResponseAuthentication no" >> /etc/ssh/sshd_config
echo "X11Forwarding yes" >> /etc/ssh/sshd_config
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
echo "UsePAM yes" >> /etc/ssh/sshd_config
---修改/etc/pam.d/sshd
echo "session required /usr/lib64/security/pam_limits.so" >> /etc/pam.d/sshd
---同步可执行程序
rsync -avb /usr/local/openssh/bin/* /usr/bin/
rsync -avb /usr/local/openssh/sbin/* /usr/sbin/
cp -a ~/openssh-10.0p1/contrib/ssh-copy-id /usr/bin/
chown root:root /usr/bin/ssh-copy-id
chmod 755 /usr/bin/ssh-copy-id

2.6 恢复原SSH配置(选做)
---如果原SSH服务端口不是默认的22端口,则升级OpenSSH后需要在/etc/ssh/sshd_config文件中修改SSH端口配置,另外需确保已关闭系统的SELinux功能并在系统防火墙中放通该端口
---如果原SSH配置文件中还有其他配置,可参照原配置在/etc/ssh/sshd_config文件中做相应的修改
2.7 设置开机自启动
---停止ssh服务
systemctl stop sshd.service
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
---配置开机自启动脚本
cp -a ~/openssh-10.0p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod 755 /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
---关闭SELinux
setenforce 0
sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
---启动ssh服务
service sshd start

2.8 验证升级后的OpenSSH版本
---此处查询的版本信息应是有误
ssh -V && /usr/sbin/sshd -V

三、回退OpenSSH版本
3.1 删除新版本的SSH配置文件
---删除新版本SSH服务的主配置目录
[[ -d /etc/ssh ]] && mv /etc/ssh /etc/ssh.10.0
---删除新版本SSH服务的二进制文件
[[ -f /usr/bin/scp ]] && mv /usr/bin/scp /usr/bin/scp.10.0
[[ -f /usr/bin/sftp ]] && mv /usr/bin/sftp /usr/bin/sftp.10.0
find /usr/bin -name "ssh*" ! -name "*.bak" | while read file; do mv $file $file.10.0; done
find /usr/sbin -name "ssh*" ! -name "*.bak" | while read file; do mv $file $file.10.0; done

3.2 还原旧版本的SSH配置文件
---还原旧版本SSH服务的主配置目录
mv /etc/ssh.bak /etc/ssh
---还原旧版本SSH服务的二进制文件
mv /usr/bin/scp.bak /usr/bin/scp
mv /usr/bin/sftp.bak /usr/bin/sftp
find /usr/bin -name "ssh*.bak" | while read file; do mv $file ${file%.bak}; done
find /usr/sbin -name "ssh*.bak" | while read file; do mv $file ${file%.bak}; done
---还原旧版本SSH服务的单元文件
mv /usr/lib/systemd/system/sshd.service.bak /usr/lib/systemd/system/sshd.service

3.3 启动SSH服务
systemctl daemon-reload
systemctl enable --now sshd.service

3.4 查看回退后的OpenSSH版本
ssh -V

四、文档更新记录
日期 | 更新记录 |
2024-12-05 | 新建文档,OpenSSH版本为OpenSSH9.9p1 |
2025-04-07 | 更新OpenSSH版本至OpenSSH9.9p2 |
2025-04-14 | 更新OpenSSH版本至OpenSSH10.0p1 |