首页 > 系统相关 >centos8升级openssl1.1.1V+openssh9.4P1亲测可用

centos8升级openssl1.1.1V+openssh9.4P1亲测可用

时间:2023-10-22 11:02:01浏览次数:41  
标签:P1 1V dev echo VERSION usr 033 null 亲测

#!/bin/bash

clear

export LANG="en_US.UTF-8"

 

#update.fix.2023-09-05

#脚本变量

DATE=`date "+%Y%m%d"`

PREFIX="/usr/local"

PERL_VERSION="5.37.5"

OPENSSL_VERSION="openssl-1.1.1v"

OPENSSH_VERSION="openssh-9.4p1"

DROPBEAR_VERSION="dropbear-2022.83"

PERL_DOWNLOAD="https://www.cpan.org/src/5.0/perl-$PERL_VERSION.tar.gz"

OPENSSL_DOWNLOAD="https://www.openssl.org/source/$OPENSSL_VERSION.tar.gz"

#https://mirrors.aliyun.com/openssh/portable/openssh-9.1p1.tar.gz

#OPENSSH_DOWNLOAD="https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/$OPENSSH_VERSION.tar.gz"

OPENSSH_DOWNLOAD="https://mirrors.aliyun.com/openssh/portable/$OPENSSH_VERSION.tar.gz"

DROPBEAR_DOWNLOAD="https://matt.ucc.asn.au/dropbear/releases/$DROPBEAR_VERSION.tar.bz2"

DROPBEAR_PORT="6666"

OPENSSH_RPM_INSTALLED=$(rpm -qa | grep ^openssh | wc -l)

SYSTEM_VERSION=$(cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/')

 

#检查用户

if [ $(id -u) != 0 ]; then

echo -e "必须使用Root用户运行脚本" "\033[31m Failure\033[0m"

echo ""

exit

fi

 

#检查系统

if [ ! -e /etc/redhat-release ] || [ "$SYSTEM_VERSION" == "3" ] || [ "$SYSTEM_VERSION" == "4" ];then

clear

echo -e "脚本仅适用于RHEL和CentOS操作系统5.x-8.x版本" "\033[31m Failure\033[0m"

echo ""

exit

fi

 

#使用说明

echo -e "\033[33m一键升级OpenSSH\033[0m"

echo ""

echo "脚本仅适用于RHEL和CentOS操作系统5.X-8.X版本"

echo "建议先临时安装DropbearSSH,再开始升级OpenSSH"

echo "旧版本OpenSSH备份在/tmp/openssh_bak_$DATE"

echo ""

 

#安装Dropbear

function INSTALL_DROPBEAR() {

echo -e "\033[33m正在安装DropBearSSH\033[0m"

echo ""

 

#安装依赖包

yum -y install gcc bzip2 wget make > /dev/null 2>&1

if [ $? -eq 0 ];then

echo -e "安装依赖包成功" "\033[32m Success\033[0m"

else

echo -e "安装依赖包失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

echo ""

 

#解压源码包

cd /tmp

wget --no-check-certificate $DROPBEAR_DOWNLOAD > /dev/null 2>&1

tar xjf $DROPBEAR_VERSION.tar.bz2 > /dev/null 2>&1

if [ -d /tmp/$DROPBEAR_VERSION ];then

echo -e "解压源码包成功" "\033[32m Success\033[0m"

else

echo -e "解压源码包失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

echo ""

 

#安装Dropbear

cd /tmp/$DROPBEAR_VERSION

./configure --disable-zlib > /dev/null 2>&1

if [ $? -eq 0 ];then

make > /dev/null 2>&1

make install > /dev/null 2>&1

else

echo -e "编译安装失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

 

#启动Dropbear

mkdir /etc/dropbear > /dev/null 2>&1

/usr/local/bin/dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key > /dev/null 2>&1

/usr/local/sbin/dropbear -p $DROPBEAR_PORT > /dev/null 2>&1

ps aux | grep dropbear | grep -v grep > /dev/null 2>&1

if [ $? -eq 0 ];then

rm -rf /tmp/$DROPBEAR_VERSION*

echo -e "启动服务端成功" "\033[32m Success\033[0m"

else

echo -e "启动服务端失败" "\033[31m Failure\033[0m"

exit

fi

echo ""

}

 

#卸载Dropbear

function UNINSTALL_DROPBEAR() {

echo -e "\033[33m正在卸载DropBearSSH\033[0m"

echo ""

ps aux | grep dropbear | grep -v grep | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1

rm -rf /etc/dropbear

rm -f /var/run/dropbear.pid

rm -f /usr/local/sbin/dropbear

rm -f /usr/local/bin/dropbearkey

rm -f /usr/local/bin/dropbearconvert

rm -f /usr/local/share/man/man8/dropbear*

rm -f /usr/local/share/man/man1/dropbear*

ps aux | grep dropbear | grep -v grep > /dev/null 2>&1

if [ $? -ne 0 ];then

echo -e "卸载服务端成功" "\033[32m Success\033[0m"

else

echo -e "卸载服务端失败" "\033[31m Failure\033[0m"

exit

fi

echo ""

}

 

#升级OpenSSH

function INSTALL_OPENSSH() {

echo -e "\033[33m正在升级OpenSSH\033[0m"

echo ""

 

#安装依赖包

yum -y install gcc wget make perl-devel pam-devel zlib-devel > /dev/null 2>&1

if [ $? -eq 0 ];then

echo -e "安装依赖包成功" "\033[32m Success\033[0m"

else

echo -e "安装依赖包失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

echo ""

 

#解压源码包

cd /tmp

wget --no-check-certificate $OPENSSL_DOWNLOAD > /dev/null 2>&1

wget --no-check-certificate $OPENSSH_DOWNLOAD > /dev/null 2>&1

tar xzf $OPENSSL_VERSION.tar.gz > /dev/null 2>&1

tar xzf $OPENSSH_VERSION.tar.gz > /dev/null 2>&1

if [ -d /tmp/$OPENSSL_VERSION ] && [ -d /tmp/$OPENSSH_VERSION ];then

echo -e "解压源码包成功" "\033[32m Success\033[0m"

else

echo -e "解压源码包失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

echo ""

 

#创建备份目录

mkdir -p /tmp/openssh_bak_$DATE/etc/{init.d,pam.d,ssh}

mkdir -p /tmp/openssh_bak_$DATE/usr/{bin,sbin,libexec}

mkdir /tmp/openssh_bak_$DATE/usr/libexec/openssh

 

#备份旧程序

cp -af /etc/ssh/* /tmp/openssh_bak_$DATE/etc/ssh/ > /dev/null 2>&1

cp -af /etc/init.d/sshd /tmp/openssh_bak_$DATE/etc/init.d/ > /dev/null 2>&1

cp -af /etc/pam.d/sshd /tmp/openssh_bak_$DATE/etc/pam.d/ > /dev/null 2>&1

cp -af /usr/bin/scp /tmp/openssh_bak_$DATE/usr/bin/ > /dev/null 2>&1

cp -af /usr/bin/sftp /tmp/openssh_bak_$DATE/usr/bin/ > /dev/null 2>&1

cp -af /usr/bin/ssh* /tmp/openssh_bak_$DATE/usr/bin/ > /dev/null 2>&1

cp -af /usr/bin/slogin /tmp/openssh_bak_$DATE/usr/bin/ > /dev/null 2>&1

cp -af /usr/sbin/sshd* /tmp/openssh_bak_$DATE/usr/sbin/ > /dev/null 2>&1

cp -af /usr/libexec/ssh* /tmp/openssh_bak_$DATE/usr/libexec/ > /dev/null 2>&1

cp -af /usr/libexec/sftp* /tmp/openssh_bak_$DATE/usr/libexec/ > /dev/null 2>&1

cp -af /usr/libexec/openssh/* /tmp/openssh_bak_$DATE/usr/libexec/openssh/ > /dev/null 2>&1

 

#卸载旧程序

if [ "$OPENSSH_RPM_INSTALLED" == "0" ];then

rm -f /etc/ssh/*

rm -f /etc/init.d/sshd

rm -f /etc/pam.d/sshd

rm -f /usr/bin/scp

rm -f /usr/bin/sftp

rm -f /usr/bin/ssh

rm -f /usr/bin/slogin

rm -f /usr/bin/ssh-add

rm -f /usr/bin/ssh-agent

rm -f /usr/bin/ssh-keygen

rm -f /usr/bin/ssh-copy-id

rm -f /usr/bin/ssh-keyscan

rm -f /usr/sbin/sshd

rm -f /usr/sbin/sshd-keygen

rm -f /usr/libexec/openssh/*

rm -f /usr/libexec/sftp-server

rm -f /usr/libexec/ssh-keysign

rm -f /usr/libexec/ssh-sk-helper

rm -f /usr/libexec/ssh-pkcs11-helper

else

rpm -e --nodeps `rpm -qa | grep ^openssh` > /dev/null 2>&1

rm -f /etc/ssh/*

fi

 

#升级Perl

if [ "$SYSTEM_VERSION" == "5" ];then

cd /tmp

wget --no-check-certificate $PERL_DOWNLOAD > /dev/null 2>&1

tar xzf perl-$PERL_VERSION.tar.gz > /dev/null 2>&1

cd perl-$PERL_VERSION

./Configure -des -Dprefix=/usr/local/perl-$PERL_VERSION > /dev/null 2>&1

make > /dev/null 2>&1

make install > /dev/null 2>&1

mv /usr/bin/perl /tmp/openssh_bak_$DATE/usr/bin/ > /dev/null 2>&1

ln -sf /usr/local/perl-$PERL_VERSION/bin/perl /usr/bin/perl > /dev/null 2>&1

fi

 

#安装OpenSSL

cd /tmp/$OPENSSL_VERSION

./config --prefix=$PREFIX/$OPENSSL_VERSION --openssldir=$PREFIX/$OPENSSL_VERSION/ssl -fPIC > /dev/null 2>&1

if [ $? -eq 0 ];then

make > /dev/null 2>&1

make install > /dev/null 2>&1

echo "$PREFIX/$OPENSSL_VERSION/lib" >> /etc/ld.so.conf

ldconfig > /dev/null 2>&1

else

echo -e "编译安装OpenSSL失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

 

#安装OpenSSH

cd /tmp/$OPENSSH_VERSION

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=$PREFIX/$OPENSSL_VERSION --with-zlib --with-pam --with-md5-passwords > /dev/null 2>&1

if [ $? -eq 0 ];then

make > /dev/null 2>&1

make install > /dev/null 2>&1

sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config > /dev/null 2>&1

cp -af /tmp/$OPENSSH_VERSION/contrib/redhat/sshd.init /etc/init.d/sshd

chmod +x /etc/init.d/sshd

chmod 600 /etc/ssh/*

# 重新加载配置

systemctl daemon-reload

# 添加开机启动

chkconfig sshd on

else

echo -e "编译安装OpenSSH失败" "\033[31m Failure\033[0m"

echo ""

exit

fi

 

#启动OpenSSH

service sshd start > /dev/null 2>&1

if [ $? -eq 0 ];then

echo -e "启动服务端成功" "\033[32m Success\033[0m"

echo ""

ssh -V

else

echo -e "启动服务端失败" "\033[31m Failure\033[0m"

exit

fi

echo ""

 

#删除源码包

rm -rf /tmp/$OPENSSL_VERSION*

rm -rf /tmp/$OPENSSH_VERSION*

rm -rf /tmp/perl-$PERL_VERSION*

}

 

#脚本菜单

echo -e "\033[36m1: 安装DropBearSSH\033[0m"

echo ""

echo -e "\033[36m2: 卸载DropBearSSH\033[0m"

echo ""

echo -e "\033[36m3: 升级OpenSSH\033[0m"

echo ""

echo -e "\033[36m4: 退出脚本\033[0m"

echo ""

read -p  "请输入对应数字后按回车开始执行脚本: " SELECT

if [ "$SELECT" == "1" ];then

clear

INSTALL_DROPBEAR

fi

if [ "$SELECT" == "2" ];then

clear

UNINSTALL_DROPBEAR

fi

if [ "$SELECT" == "3" ];then

clear

INSTALL_OPENSSH

fi

if [ "$SELECT" == "4" ];then

echo ""

exit

fi

#--------------------

#如ssh启动不了,如下:

#关闭selinux     vi /etc/selinux/config  手工

#修改SELINUX=enforce为SELINUX=disable  重启服务器后

restorecon -r -v /root/.ssh

#开启selinux    vi /etc/linux/config  手工

#修改为SELINUX=enforcing

systemctl start sshd

#-----------------------------------


标签:P1,1V,dev,echo,VERSION,usr,033,null,亲测
From: https://blog.51cto.com/u_14775406/7974639

相关文章

  • ABBAC900F学习笔记325:FREELANCE2019SP1的OPC练习1
    这一篇博客我爱新浪博客发表过,地址是ABBAC900F学习笔记325:FREELANCE2019SP1的OPC练习1_来自金沙江的小鱼_新浪博客(sina.com.cn)我在这里也记录一遍今天在家做一下freelance2019SP1的OPC通讯练习。新建一个freelance项目,插入硬件和软件、OPC网关、OS等,按照以前的练习配置资源......
  • 面试必刷TOP101:8、链表中倒数最后k个结点
    一、题目输入一个长度为n的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为0的链表。二、题解2.1快慢指针第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指......
  • Sodick 沙迪克 LP20EH3 P12S14 成型机 注塑机 配置网络ip 备忘
    型号:LP20EH3 P12S14Sodick沙迪克LP20EH3 P12S14成型机注塑机配置网络ip备忘 ......
  • 态路小课堂丨400G QSFP112—助力IDC数据中心升级
    TARLUZ态路来源网络随着IDC数据中心不断的发展,光模块向着更高速率、更小的尺寸和更低损耗不断升级,以适应不同使用场景。光模块一般采用提高单通道比特速率、增加通道数或改变调制方式来实现光模块的速率升级。如上图所示,400G光模块有56GPAM4和112GPAM4两种调制方案,本文态路为您介......
  • P1525 [NOIP2010 提高组] 关押罪犯
    P1525[NOIP2010提高组]关押罪犯法一:二分图把犯人分配到两个监狱,使得监狱内的怒气值最大最小分配到两个集合中,考虑二分染色分析因为答案具有单调性所以可以二分:判断x是否符合,只需要重建大于x的边,如果不能把它们分到两个集合中(二分染色失败),就往上调(考虑无限大,那么就不矛盾)......
  • 面试必刷TOP101:6、判断链表中是否有环
    一、题目二、题解2.1双指针我们使用两个指针,fast与slow。它们起始都位于链表的头部。随后,slow指针每次向后移动一个位置,而fast指针向后移动两个位置。如果链表中存在环,则fast指针最终将再次与slow指针在环中相遇。importjava.util.*;/***Definitionforsingly-linke......
  • P1590 失踪的7
    这么简洁的题目当然不用数位DP啦。将\(n\)搞成\(10\)的幂次之和计算。比如说\(1234\)就拆成\(1\sim4,1\sim30,1\sim200,1\sim1000\)来计算。枚举后缀长度\(i\),除去最高位外剩下每一位都可以填除\(7\)以外的任何数字,所以它的贡献即为\(9^{i-1}\)再乘上最高位能......
  • P1124 题解
    题目大意一个长度为\(n\)的字符串\(S\),进行以下操作。假设\(s\)为acbdef,每一次将首字母移至末尾,得到\(6\)个字符串:acbdefcbdefabdefacdefacbefacbdfacbde将每个字符串的首字母排序:acbdefbdefaccbdefadefacbefacbdfacbde每个字符串的末尾连在一起为fcab......
  • 企业IT部门管理者必备:CIO工作指南 P120
       本人从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.   【智能制造数字化咨询】该PPT共120页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击关注下方。人们经常建议CIO将IT......
  • 面试必刷TOP101:5、合并k个已排序的链表
    一、题目二、题解顺序合并解题思路1、将k个链表配对并将同一对中的链表进行合并(采用顺序合并的方法)2、第一轮合并后,k个链表合并成了k/2个链表,平均长度2n/k,然后是k/4、k/8...等等3、重复这一过程,知道获取最终的有序链表importjava.util.*;/***Definitionforsingly-linke......