做运维多年,无论什么样的等保评测或者安全漏洞扫描,openssh漏洞修复永远是绕不开话题,所以升级脚本很重要,如下openssh升级脚本,目前测试过100台以上centos7服务器,根据需要先安装依赖包,然后建议安装Dropbear(轻量级ssh),留条后路总是好的。如果需要官网最新的版本,也可以直接根据需要修改对应版本号就可以了。
#!/bin/bash clear export LANG="en_US.UTF-8" #脚本变量 CUR_PATH=$(cd `dirname $0`;echo `pwd`) DATE=`date "+%Y%m%d"` PREFIX="/usr/local" SRC_PATH=$CUR_PATH/src BAK_PATH=$CUR_PATH/bak BUILD_PATH=$CUR_PATH/build LOG_PATH=$CUR_PATH/log #定义版本 DROPBEAR_VERSION="dropbear-2019.78" ZLIB_VERSION="zlib-1.2.11" OPENSSL_VERSION="openssl-1.1.1d" OPENSSH_VERSION="openssh-8.2p1" #下载地址 DROPBEAR_DOWNLOAD="https://matt.ucc.asn.au/dropbear/releases/$DROPBEAR_VERSION.tar.bz2" ZLIB_DOWNLOAD="http://zlib.net/$ZLIB_VERSION.tar.gz" OPENSSL_DOWNLOAD="https://www.openssl.org/source/$OPENSSL_VERSION.tar.gz" OPENSSH_DOWNLOAD="https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/$OPENSSH_VERSION.tar.gz" #检查用户 if [ $(id -u) != 0 ]; then echo -e "当前登陆用户为普通用户,必须使用Root用户运行脚本,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi #使用说明 echo -e "\033[33m软件升级\033[0m" #echo "" #echo "脚本仅适用于RHEL和CentOS操作系统,支持4.x-7.x版本" #echo "必须使用Root用户运行脚本,确保本机已配置好软件仓库" #echo "企业生产环境中建议先临时安装Dropbear,再升级OpenSSH" #echo "旧版本OpenSSH文件备份在/tmp/backup_$DATE/openssh" echo "" mkdir -p $SRC_PATH &>/dev/null mkdir -p $BUILD_PATH &>/dev/null mkdir -p $LOG_PATH &>/dev/null #下载源码包 function GET_SRC(){ cd $SRC_PATH [ ! -e $SRC_PATH/$DROPBEAR_VERSION.tar.bz2 ] && wget --no-check-certificate $DROPBEAR_DOWNLOAD || echo "$DROPBEAR_VERSION.tar.bz2 已存在" [ ! -e $SRC_PATH/$ZLIB_VERSION.tar.gz ] && wget --no-check-certificate $ZLIB_DOWNLOAD || echo "$ZLIB_VERSION.tar.gz 已存在" [ ! -e $SRC_PATH/$OPENSSL_VERSION.tar.gz ] && wget --no-check-certificate $OPENSSL_DOWNLOAD || echo "$OPENSSL_VERSION.tar.gz 已存在" [ ! -e $SRC_PATH/$OPENSSH_VERSION.tar.gz ] && wget --no-check-certificate $OPENSSH_DOWNLOAD || echo "$OPENSSH_VERSION.tar.gz 已存在" } #安装依赖包 function Yum_install(){ yum -y install gcc bzip2 wget make net-tools pam-devel perl } function Yum_download(){ #yum install yum-plugin-downloadonly -y yum -y install --downloadonly --downloaddir=$SRC_PATH gcc bzip2 wget make net-tools pam-devel perl } function Rpm_install(){ #yum -y localinstall $SRC_PATH/*.rpm rpm -Uvh $SRC_PATH/*.rpm } #安装Dropbear function INSTALL_DROPBEAR() { #解压源码包 echo "解压源码" tar xjf $SRC_PATH/$DROPBEAR_VERSION.tar.bz2 -C $BUILD_PATH/ if [ -d $BUILD_PATH/$DROPBEAR_VERSION ];then echo -e "解压软件源码包成功" "\033[32m Success\033[0m" else echo -e "解压软件源码包失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi echo "" #安装Dropbear echo "编译安装Dropbear" cd $BUILD_PATH/$DROPBEAR_VERSION ./configure --disable-zlib &>> $LOG_PATH/dropbear.log if [ $? -eq 0 ];then make &>> $LOG_PATH/dropbear.log make install &>> $LOG_PATH/dropbear.log else echo -e "编译安装Dropbear失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi #启动Dropbear mkdir /etc/dropbear > /dev/null 2>&1 /usr/local/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key > /dev/null 2>&1 /usr/local/bin/dropbearkey -t rsa -s 4096 -f /etc/dropbear/dropbear_rsa_host_key > /dev/null 2>&1 /usr/local/sbin/dropbear -p 6666 > /dev/null 2>&1 netstat -lantp | grep -w "0.0.0.0:6666" > /dev/null 2>&1 if [ $? -eq 0 ];then echo -e "启动Dropbear服务成功" "\033[32m Success\033[0m" echo "" echo -e "服务监听本地端口6666" "\033[33m Warnning\033[0m" else echo -e "启动Dropbear服务失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" sleep 3 exit fi echo "" } #卸载dropbear function UNINSTALL_DROPBEAR() { ps aux | grep dropbear | grep -v grep | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 find /usr/local/ -name dropbear* | xargs rm -rf > /dev/null 2>&1 rm -rf /etc/dropbear > /dev/null 2>&1 rm -rf /var/run/dropbear.pid > /dev/null 2>&1 ps aux | grep -w "/usr/local/sbin/dropbear" | grep -v grep > /dev/null 2>&1 if [ $? -ne 0 ];then echo -e "卸载DropBear成功" "\033[32m Success\033[0m" else echo -e "卸载DropBear失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" sleep 3 exit fi echo "" } #升级OpenSSH function OPENSSH() { #创建备份目录 echo "创建备份目录 $BAK_PATH/backup_$DATE" mkdir -p $BAK_PATH/backup_$DATE/openssh/usr/{bin,sbin} > /dev/null 2>&1 mkdir -p $BAK_PATH/backup_$DATE/openssh/etc/{init.d,pam.d,ssh} > /dev/null 2>&1 mkdir -p $BAK_PATH/backup_$DATE/openssh/usr/libexec/openssh > /dev/null 2>&1 mkdir -p $BAK_PATH/backup_$DATE/openssh/usr/share/man/{man1,man8} > /dev/null 2>&1 #解压源码包 echo "解压源码" tar xzf $SRC_PATH/$ZLIB_VERSION.tar.gz -C $BUILD_PATH/ tar xzf $SRC_PATH/$OPENSSL_VERSION.tar.gz -C $BUILD_PATH/ tar xzf $SRC_PATH/$OPENSSH_VERSION.tar.gz -C $BUILD_PATH/ if [ -d $BUILD_PATH/$ZLIB_VERSION ] && [ -d $BUILD_PATH/$OPENSSL_VERSION ] && [ -d $BUILD_PATH/$OPENSSH_VERSION ];then echo -e "解压软件源码包成功" "\033[32m Success\033[0m" else echo -e "解压软件源码包失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi echo "" #安装Zlib echo "编译安装Zlib" cd $BUILD_PATH/$ZLIB_VERSION ./configure --prefix=$PREFIX/$ZLIB_VERSION &>> $LOG_PATH/zlib.log if [ $? -eq 0 ];then make &>> $LOG_PATH/zlib.log make install &>> $LOG_PATH/zlib.log else echo -e "编译安装压缩库失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi if [ -e $PREFIX/$ZLIB_VERSION/lib/libz.so ];then echo "$PREFIX/$ZLIB_VERSION/lib" >> /etc/ld.so.conf ldconfig > /dev/null 2>&1 echo -e "编译安装压缩库成功" "\033[32m Success\033[0m" else echo -e "编译安装压缩库失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi echo "" #备份旧版OpenSSH echo "备份OpenSSH..." rpm -qa | grep -w "openssh-server" > /dev/null 2>&1 if [ $? -eq 0 ];then cp /usr/bin/openssl $BAK_PATH/backup_$DATE/openssh/usr/bin > /dev/null 2>&1 cp /usr/bin/ssh* $BAK_PATH/backup_$DATE/openssh/usr/bin > /dev/null 2>&1 cp /usr/sbin/sshd $BAK_PATH/backup_$DATE/openssh/usr/sbin > /dev/null 2>&1 cp /etc/init.d/sshd $BAK_PATH/backup_$DATE/openssh/etc/init.d > /dev/null 2>&1 cp /etc/pam.d/sshd $BAK_PATH/backup_$DATE/openssh/etc/pam.d > /dev/null 2>&1 cp /etc/ssh/ssh* $BAK_PATH/backup_$DATE/openssh/etc/ssh > /dev/null 2>&1 cp /etc/ssh/sshd_config $BAK_PATH/backup_$DATE/openssh/etc/ssh > /dev/null 2>&1 cp /usr/share/man/man1/ssh* $BAK_PATH/backup_$DATE/openssh/usr/share/man/man1 > /dev/null 2>&1 cp /usr/share/man/man8/ssh* $BAK_PATH/backup_$DATE/openssh/usr/share/man/man8 > /dev/null 2>&1 cp /usr/libexec/openssh/ssh* $BAK_PATH/backup_$DATE/openssh/usr/libexec/openssh > /dev/null 2>&1 rpm -e --nodeps openssh-clients openssh-server openssh > /dev/null 2>&1 else mv /usr/bin/ssh* $BAK_PATH/backup_$DATE/openssh/usr/bin > /dev/null 2>&1 mv /usr/sbin/sshd $BAK_PATH/backup_$DATE/openssh/usr/sbin > /dev/null 2>&1 mv /etc/init.d/sshd $BAK_PATH/backup_$DATE/openssh/etc/init.d > /dev/null 2>&1 mv /etc/pam.d/sshd $BAK_PATH/backup_$DATE/openssh/etc/pam.d > /dev/null 2>&1 mv /etc/ssh/ssh* $BAK_PATH/backup_$DATE/openssh/etc/ssh > /dev/null 2>&1 mv /etc/ssh/sshd_config $BAK_PATH/backup_$DATE/openssh/etc/ssh > /dev/null 2>&1 mv /usr/share/man/man1/ssh* $BAK_PATH/backup_$DATE/openssh/usr/share/man/man1 > /dev/null 2>&1 mv /usr/share/man/man8/ssh* $BAK_PATH/backup_$DATE/openssh/usr/share/man/man8 > /dev/null 2>&1 mv /usr/libexec/ssh* $BAK_PATH/backup_$DATE/openssh/usr/libexec > /dev/null 2>&1 fi #安装OpenSSL echo "编译安装OpenSSL" cd $BUILD_PATH/$OPENSSL_VERSION ./config --prefix=$PREFIX/$OPENSSL_VERSION --openssldir=$PREFIX/$OPENSSL_VERSION/ssl -fPIC &>> $LOG_PATH/openssl.log if [ $? -eq 0 ];then make &>> $LOG_PATH/openssl.log make install &>> $LOG_PATH/openssl.log else echo -e "编译安装OpenSSL失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi if [ -e $PREFIX/$OPENSSL_VERSION/bin/openssl ];then echo "$PREFIX/$OPENSSL_VERSION/lib" >> /etc/ld.so.conf ldconfig > /dev/null 2>&1 mv /usr/bin/openssl{,.bak} ln -sfv $PREFIX/$OPENSSL_VERSION/bin/openssl /usr/bin/openssl echo -e "编译安装OpenSSL成功" "\033[32m Success\033[0m" fi echo "" #安装OpenSSH echo "编译装OpenSSH" cd $BUILD_PATH/$OPENSSH_VERSION ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=$PREFIX/$OPENSSL_VERSION --with-zlib=$PREFIX/$ZLIB_VERSION --with-pam --with-md5-passwords &>> $LOG_PATH/openssh.log if [ $? -eq 0 ];then make &>> $LOG_PATH/openssh.log make install &>> $LOG_PATH/openssh.log else echo -e "编译安装OpenSSH失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" echo "" sleep 3 exit fi if [ -e /usr/sbin/sshd ];then echo -e "编译安装OpenSSH成功" "\033[32m Success\033[0m" fi echo "" echo "配置并重启sshd" #配置OpenSSH服务端(允许root登陆) echo "UseDNS no" >> /etc/ssh/sshd_config echo "PermitRootLogin yes" >> /etc/ssh/sshd_config sed -i 's/^GSSAPI/#GSSAPI/g' /etc/ssh/sshd_config sed -i 's/^UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #启动OpenSSH cp -rf $BUILD_PATH/$OPENSSH_VERSION/contrib/redhat/sshd.init /etc/init.d/sshd cp -rf $BUILD_PATH/$OPENSSH_VERSION/contrib/redhat/sshd.pam /etc/pam.d/sshd chmod +x /etc/init.d/sshd chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_dsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key chkconfig --add sshd chkconfig sshd on service sshd restart > /dev/null 2>&1 if [ $? -eq 0 ];then echo -e "启动OpenSSH服务成功" "\033[32m Success\033[0m" echo "" ssh -V else echo -e "启动OpenSSH服务失败,三秒后自动退出脚本" "\033[31m Failure\033[0m" sleep 3 exit fi echo "" } #脚本菜单 echo -e "=======依赖包相关=============" echo -e "\033[36m1: Yum安装依赖包\033[0m" echo "" echo -e "\033[36m2: Yum下载依赖包\033[0m" echo "" echo -e "\033[36m3: Rpm安装依赖包\033[0m" echo "" echo -e "=======OpenSSH源码下载========" echo -e "\033[36m4: 下载源码\033[0m" echo "" echo -e "=======DropBear相关===========" echo -e "\033[36m5: 安装DropBear\033[0m" echo "" echo -e "\033[36m6: 卸载DropBear\033[0m" echo "" echo -e "=======OpenSSH升级相关========" echo -e "\033[36m7: 升级OpenSSH\033[0m" echo "" echo -e "\033[36m8: 退出脚本\033[0m" echo "" read -p "请输入对应数字后按回车开始执行脚本: " SELECT if [ "$SELECT" == "1" ];then clear Yum_install fi if [ "$SELECT" == "2" ];then clear Yum_download fi if [ "$SELECT" == "3" ];then clear Rpm_install fi if [ "$SELECT" == "4" ];then clear GET_SRC fi if [ "$SELECT" == "5" ];then clear INSTALL_DROPBEAR fi if [ "$SELECT" == "6" ];then clear UNINSTALL_DROPBEAR fi if [ "$SELECT" == "7" ];then clear OPENSSH fi if [ "$SELECT" == "8" ];then echo "" exit fi
脚本下载地址
转载请注明:梦绘设计 » Python/Shell » openssh 8.2一键升级shell脚本(已验证)
版权声明
本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。