目录
简介
OpenSSH(OpenBSD Secure Shell)是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
目前有一台服务器使用了OpenSSH 7.4p1,但该版本的OpenSSH存在OpenSSH代码问题漏洞(CVE-2023-38408)。 OpenSSH 9.3p2之前版本存在安全漏洞,该漏洞源于ssh-agent的PKCS11功能存在安全问题。攻击者可利用该漏洞执行远程代码。
由于OpenSSH9.8p1要求OpenSSL1.1.1v以上,所以把OpenSSL一并升级。
升级过程
一、下载OpenSSH和OpenSSL对应的版本:
OpenSSH下载路径:
1、OpenBSD提供的多语言下载路径:OpenSSH: Portable Release
2、国内阿里云的下载路径:pub-OpenBSD-OpenSSH-portable安装包下载_开源镜像站-阿里云 (aliyun.com)
OpenSSL下载路径:
1、OpenSSL 1.1.1v:Release OpenSSL 1.1.1v · openssl/openssl · GitHub
2、OpenSSL 3.3.1v:Release OpenSSL 3.3.1 · openssl/openssl · GitHub
配合OpenSSH 9.8p1的安装只需要升级到OpenSSL 1.1.1v就可以了。
1.1 下载到Linux当中
下载OpenSSH9.8p1到当前目录下
> wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
下载OpenSSL 1.1.1v到当前目录下
> wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1v/openssl-1.1.1v.tar.gz
二、安装前对系统环境的检查
2.1 安装前的检查
系统版本检查
> cat /etc/redhat-release
OpenSSL版本检查
> openssl version
OpenSSH版本检查
> ssh -V
2.2 安装依赖包
建议都安装一遍防止遗漏,影响后续的编译
> yum -y install gcc pam-devel zlib-devel openssl-devel net-tools
三、安装OpenSSL 1.1.1v
3.1 解压已经下载好的openssl-1.1.1v.tar.gz
将/home/openssl-1.1.1v.tar.gz解压到/home目录下
> tar -zxvf /home/openssl-1.1.1v.tar.gz -C /home/
查看解压后当前目录的情况
> ll /home | grep openssl
进入解压文件的目录
> cd /home/openssl-1.1.1v
3.2 安装配置和编译
查看已安装的OpenSSL版本
> openssl version
配置编译
> ./config --prefix=/opt/openssl # --prefix选项配置安装目录
编译和安装
> make&&make install
# 配置编译、编译和安装要没有error报错才代表成功安装,才可以继续下一步
3.3 更新lib文件
检查所需要的函数库
> ldd /opt/openssl/bin/openssl
添加新装的OpenSSL的库文件路径到ld.so.conf
> echo "/opt/openssl/lib" >> /etc/ld.so.conf
更新系统函数库
> ldconfig --verbose
3.4 更新bin文件
查询命令所在目录
> which openssl
/usr/bin/openssl # 这是命令文件所在的路径
备份OpenSSL命令原文件
> mv /usr/bin/openssl /usr/bin/openssl.bak
创建软连接 # 以后版本升级只需要安装在/opt/openssl就会自动更新命令文件了
> ln -s /opt/openssl/bin/openssl /usr/bin/openssl
查看现在的OpenSSL版本
> openssl version
四、安装OpenSSH 9.8p1
4.1 解压已经下载好的openssh-9.8p1.tar.gz
将/home/openssh-9.8p1.tar.gz解压到/home目录下
> tar -zxvf /home/openssl-1.1.1v.tar.gz -C /home/
查看解压后当前目录的情况
> ll /home | grep openssh
进入解压文件的目录
> cd /home/openssh-9.8p1
使用for循环,卸载openssh
> for i in $(rpm -qa | grep openssh);do rpm -e $i --nodeps;done
4.2 安装配置和编译
配置编译
> ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/opt/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
# --prefix选项配置安装目录 --sysconfdir选项配置文件路径 --with-ssl-dir选项openssl的安装路径
编译和安装
> make&&make install
# 配置编译、编译和安装要没有error报错才代表成功安装,才可以继续下一步
4.3 sshd.init脚本的修改
从源码目录下复制sshd.init到/etc/init.d/
> cp /home/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/
# sshd.init脚本默认的sshd路径为/usr/sbin/sshd,如果编译配置时选择的是这个路径就无需下面的操作
更新sshd安装路径(也可以用vim找到对应的文件进行修改)
> cat -n /etc/init.d/sshd.init | grep SSHD
> sed -i "s/SSHD=\/usr\/sbin\/sshd/SSHD=\/usr\/local\/openssh\/sbin\/sshd/g" /etc/init.d/sshd.init # vim /etc/init.d/sshd.init 打开后修改对应行
# sshd.init脚本默认的ssh-keygen路径为/usr/bin/ssh-keygen,如果编译配置时选择的是这个路径就无需下面的操作
更新ssh-keygen安装路径
> cat -n /etc/init.d/sshd.init | grep ssh-keygen
> sed -i "s#/usr/bin/ssh-keygen -A#/usr/local/openssh/bin/ssh-keygen -A#g" /etc/init.d/sshd.init
4.4 修改配置文件
开启允许X11转发和密码验证
> echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
> echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
4.5 启动服务和设置开机启动
复制新安装的openssh相关命令到系统目录
> cp -arp /usr/local/openssh/bin/* /usr/bin/
启动服务
> /etc/init.d/sshd.init
查看sshd版本验证是否启动成功
> ssh -V
添加开机启动
> chmod +x /etc/rc.d/rc.local
> echo “/etc/init.d/sshd.init start” >> /etc/rc.d/rc.local
常见问题
systemctl无法管理sshd
重新安装openssh-server即可
> yum -y install openssh-server
如果有报错使用该命令查看具体异常原因
> tail -f /var/log/messages
> tail -f /var/log/secure
selinux拦截导致SSH服务器拒绝密码登录
> setenforce 0
ssh_host_dsa_key生成失败
通常该状况都会在安装时提示error(ignore),这个时候我们应该继续安装,在安装完成后在配置文件中修改为rsa即可
> echo "HostKey /etc/ssh/ssh_host_rsa_key" >> /etc/ssh/sshd_config