Linux ssh版本升级
更新和修复OpenSSH漏洞指南
本指南旨在为Linux运维工程师提供详尽的OpenSSH漏洞修复步骤,包括如何升级OpenSSH和OpenSSL。请确保按照以下步骤操作,避免潜在错误。
1. 准备工作
环境准备
- 测试环境:CentOS 7
下载最新版本
注意:下载后将文件复制到 /opt 目录。
2. 检查当前版本
使用命令 ssh -V 检查当前安装的OpenSSH和OpenSSL版本。若非以下版本,直接跳至步骤6,直接去升级openssh即可。
- OpenSSH 7.4
- OpenSSL 1.0.2k
3. 安装依赖
有网络环境
运行以下命令安装必要依赖:
yum install -y perl gcc-c++ zlib zlib-devel pam-devel perl-CPAN perl-IPC-Cmd
无网络环境
从其他有网络的CentOS 7系统打包依赖(其他系统自己想办法),并使用以下命令安装:
rpm -Uvh ./*.rpm --force --nodeps
依赖包可通过我的百度网盘下载:下载链接
4. 安装OpenSSL
设置系统时间
确保系统时间正确,不准确的时间会导致安装失败。使用 date -s "00:00:00 2023-09-14" 命令校准时间。
安装步骤
tar -zxvf openssl-1.1.1v.tar.gz
cd openssl-1.1.1v
./config
make
make install
5. 备份原有OpenSSL
创建配置文件并更新动态链接库配置:
echo '/usr/local/lib' > /etc/ld.so.conf.d/usr_local_lib.conf
echo '/usr/local/lib64' > /etc/ld.so.conf.d/usr_local_lib64.conf
ldconfig
6. 升级OpenSSH
解压并配置
tar -zxvf openssh-9.4p1.tar.gz
cd openssh-9.4p1
./configure --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/ssl --with-zlib
make
处理潜在问题
- 若系统提示存在多个OpenSSL版本,使用
--without-openssl-header-check参数重新配置。 - 若编译时提示找不到OpenSSL库,尝试卸载系统自带的OpenSSL:
rpm -e --nodeps openssl*
安装与配置
mv /etc/ssh /etc/ssh_bak
make install
配置sshd
编辑 /etc/ssh/sshd_config 文件,确保以下配置正确:
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
X11Forwarding yes
备份原有OpenSSH并替换新文件
首先备份原有系统自带的OpenSSH文件,再替换链接新的过去
mv /usr/bin/scp /usr/bin/scp_bak
mv /usr/bin/sftp /usr/bin/sftp_bak
mv /usr/bin/ssh /usr/bin/ssh_bak
mv /usr/bin/ssh-add /usr/bin/ssh-add_bak
mv /usr/bin/ssh-agent /usr/bin/ssh-agent_bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen_bak
mv /usr/bin/ssh-keyscan /usr/bin/ssh-keyscan_bak
mv /usr/sbin/sshd /usr/sbin/sshd_bak
接着,安装新版OpenSSH,并确保所有关键的二进制文件链接到新的安装位置:
ln -s /usr/local/bin/scp /usr/bin/scp
ln -s /usr/local/bin/sftp /usr/bin/sftp
ln -s /usr/local/bin/ssh /usr/bin/ssh
ln -s /usr/local/bin/ssh-add /usr/bin/ssh-add
ln -s /usr/local/bin/ssh-agent /usr/bin/ssh-agent
ln -s /usr/local/bin/ssh-keygen /usr/bin/ssh-keygen
ln -s /usr/local/bin/ssh-keyscan /usr/bin/ssh-keyscan
ln -s /usr/local/sbin/sshd /usr/sbin/sshd
然后,备份并更新 ssh-copy-id 工具:
mv /usr/bin/ssh-copy-id /usr/bin/ssh-copy-id_bak
cp contrib/ssh-copy-id /usr/bin/ssh-copy-id
chmod +x /usr/bin/ssh-copy-id
这些步骤确保在升级过程中,原有的OpenSSH文件保持安全,且新安装的版本能够正常运行。
替换启动脚本并重启服务
systemctl disable sshd
systemctl stop sshd
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service_bak
cp contrib/redhat/sshd.init /etc/init.d/sshd
systemctl enable sshd
systemctl start sshd
验证安装
使用 ssh -V 检查OpenSSH版本。
7. 验证OpenSSL位置
若需要确认安装的OpenSSL位置,执行:
find / -name openssl
根据找到的路径,在编译OpenSSH时相应地指定 --with-ssl-dir 选项。注意,OpenSSH 9.4及以上版本需与OpenSSL 1.1.1以上版本配合使用。如果先前已安装较新版本的OpenSSL,则无需重新安装,直接从步骤6开始升级OpenSSH即可。