No matter when you start, it is important not to stop after the start
随着OpenSSH更新,之前的版本也存在了一些已知漏洞,给系统带来安全风险,OpenSSH 8.2p1版本已经发布,该版本的一些新特性最主要的就是加密方式的改变,禁用了ssh-rsa算法;支持FIDO/U2F硬件认证器。
一、升级说明
1、升级OpenSSH后,原有公钥失效,信任关系需要重新配置;
2、升级过程需要停止sshd服务,会导致ssh和sftp无法使用;
3、升级需要关闭防火墙服务;
4、升级需要关闭selinux服务;
5、升级前需要开启telnet,防止升级失败,系统无法登录,对应的防火墙需要开启23端口,安装需要telnet相关包(推荐通过系统ISO安装)
6、升级过程中需要刷新lib库:ldconfig -v;
7、升级顺序:顺序是zlib库-> openssl -> openssh;
8、升级需要gcc、make、perl、zlib、zlib-devel、pam、pam-devel等依赖包;
二、升级准备
1、确保YUM功能可用;
2、下载下面的安装包上传到系统;
zlib-1.2.11.tar.gz openssl-1.0.2r.tar.gz openssh-8.2p1.tar.gz
三、升级操作
执行下面的脚本(保存为*.sh文件,并赋予执行权限,与上面三个压缩包放在同一个目录下)或者按脚本步骤进行操作,考虑到不同系统配置环境不通,建议预先进行测试。请务必开启telnet,以免升级过程中断导致无法连接系统。
#!/bin/bash clear echo ------------------------------------------ echo CentOS7 openssh升级到8.2p1 echo By feichai echo 生产环境使用前请做好测试 echo ------------------------------------------ sleep 5s clear echo 安装进程开始 echo $(date +%F-%T) 安装进程开始…… > update.log sleep 1s clear echo 刷新yum元数据缓存 echo $(date +%F-%T) 刷新yum元数据缓存开始…… >> update.log sleep 2s yum makecache echo $(date +%F-%T) 刷新yum元数据缓存结束…… >> update.log sleep 1s clear echo 检测安装telnet服务 echo $(date +%F-%T) 检测telnet服务开始…… >> update.log sleep 1s echo 尝试启动telnet服务 sleep 2s systemctl restart telnet.socket && systemctl restart xinetd ps -ef |grep xinetd | egrep -v grep > /dev/null if [ $? -eq 0 ] then echo 检测到telnet服务已启动…… systemctl enable telnet.socket systemctl enable xinetd echo $(date +%F-%T) 检测到telnet服务并启动…… >> update.log sleep 2s else echo 未检测到telnet服务,开始安装服务…… echo $(date +%F-%T) 未检测到telnet服务,开始安装…… >> update.log sleep 2s yum -y install xinetd telnet-server cp /etc/securetty /etc/securetty.bak echo "pts/0" >> /etc/securetty echo "pts/1" >> /etc/securetty echo $(date +%F-%T) 安装telnet服务结束…… >> update.log sleep 2s clear echo 安装telnet服务结束,启动服务…… echo $(date +%F-%T) 启动telnet服务开始…… >> update.log systemctl restart telnet.socket && systemctl restart xinetd echo $(date +%F-%T) 启动telnet服务结束…… >> update.log sleep 1s fi clear echo 关闭SElinux并禁用…… echo $(date +%F-%T) 关闭SElinux并禁用开始…… >> update.log sleep 2s setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config cat /etc/selinux/config sleep 2s echo $(date +%F-%T) 关闭SElinux并禁用结束…… >> update.log clear echo 安装程序依赖包…… echo $(date +%F-%T) 安装程序依赖包开始…… >> update.log sleep 2s yum -y install gcc gcc-c++ make pam pam-devel openssl-devel pcre-devel perl zlib-devel echo $(date +%F-%T) 安装程序依赖包结束…… >> update.log sleep 1s clear echo 停止并卸载原有ssh echo $(date +%F-%T) 停止并卸载原有ssh开始…… >> update.log sleep 2s systemctl stop sshd cp -r /etc/ssh /etc/ssh.old cp /etc/init.d/ssh /etc/init.d/ssh.old rpm -qa | grep openssh sleep 1s rpm -e `rpm -qa | grep openssh` --nodeps rpm -qa | grep openssh echo $(date +%F-%T) 停止并卸载原有ssh结束…… >> update.log sleep 1s clear echo 安装zlib echo $(date +%F-%T) 安装zlib开始…… >> update.log sleep 2s tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure --prefix=/usr/local/zlib && make && make install ls -l /usr/local/zlib cd .. echo $(date +%F-%T) 安装zlib结束…… >> update.log sleep 1s clear echo 配置zlib echo $(date +%F-%T) 配置zlib开始…… >> update.log echo "/usr/local/zlib/lib" >> /etc/ld.so.conf.d/zlib.conf ldconfig -v sleep 1s echo $(date +%F-%T) 配置zlib结束…… >> update.log clear echo 安装openssl echo $(date +%F-%T) 安装openssl开始…… >> update.log sleep 2s tar -zxvf openssl-1.0.2r.tar.gz cd openssl-1.0.2r ./config shared zlib && make && make install cd .. echo $(date +%F-%T) 安装openssl结束…… >> update.log sleep 1s clear echo 配置openssl echo $(date +%F-%T) 配置openssl开始…… >> update.log sleep 2s mv /usr/bin/openssl /usr/bin/openssl.bak ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl echo "/usr/local/ssl/lib" >> /etc/ld.so.conf.d/ssl.conf ldconfig -v openssl version -a sleep 1s clear echo $(date +%F-%T) 配置openssl结束…… >> update.log echo 安装openssh echo $(date +%F-%T) 安装openssh开始…… >> update.log sleep 2s rm -rf /etc/ssh tar -zxvf openssh-8.2p1.tar.gz cd openssh-8.2p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl --with-zlib --with-md5-passwords make sleep 1s chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key make install cd .. echo $(date +%F-%T) 安装openssh结束…… >> update.log sleep 1s clear echo 配置openssh echo $(date +%F-%T) 配置openssh开始…… >> update.log sleep 2s echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config echo "PermitRootLogin yes" >> /etc/ssh/sshd_config echo 'Banner /etc/issue' >> /etc/ssh/sshd_config cp -p openssh-8.2p1/contrib/redhat/sshd.init /etc/init.d/sshd chmod +x /etc/init.d/sshd chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key chkconfig --add sshd chkconfig sshd on systemctl restart sshd clear echo 安装ssh2支持 yum install libssh2 -y sleep 1s clear echo $(date +%F-%T) 配置openssh结束…… >> update.log systemctl status sshd if [ $? -eq 0 ] then echo SSH安装成功,开始关闭并禁用telnet echo $(date +%F-%T) 关闭并禁用telnet开始…… >> update.log sleep 2s systemctl stop telnet.socket && systemctl stop xinetd systemctl disable telnet.socket && systemctl disable xinetd echo $(date +%F-%T) 关闭并禁用telnet结束…… >> update.log clear echo 安装进程结束 sleep 2s echo $(date +%F-%T) 安装进程结束…… >> update.log else echo SSH未成功安装或配置,安装进程即将退出,请检查…… echo $(date +%F-%T) 错误,SSH未成功安装或配置…… >> update.log sleep 3s echo -e "\n" echo 安装进程结束 echo $(date +%F-%T) 安装进程结束…… >> update.log fi ssh -V systemctl status sshd
注意:如果脚本执行完毕后,ssh进程未正常启动或安装报错,请根据错误信息及时排错。“坑一直有,多踩几次就好了!”
升级完成后应该显示如下图所示:
Everyone has that part of himself who lives for others
随机数:184800130284
本文来源于:https://www.fcblog.cn/post/49.html