openssh+openssl升级排障

先升级openssl,后升级openssh

#!/bin/bash

function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }

log(){
    status="$2"
    [ "$1" -eq 0 ] && echo -e "\033[32m[OK]\033[0m $status" || echo -e "\033[31m[NO]\033[0m $status"
}

file_modify(){
    match_value=$1
    file=$2
    value=$3
    match=`grep -Ev "^\s*#|^\s*$" $file |grep -E $match_value |tail -n1`
    if [ -z "$match" ]; then
        echo "$value" >> $file
        echo $?
    else
        sed -i "s#$match#$value#g" $file
        echo $?
    fi
}

check(){
    match_value=$1
    file=$2
    value=$3
    res=`file_modify "$match_value" "$file" "$value" `
    msg1="file: $file match: $match_value modify: $value"
}

path=`pwd`
version="openssh-8.3p1"
osversion=`cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'`
url="https://mirrors.tuna.tsinghua.edu.cn/OpenBSD/OpenSSH/portable/${version}.tar.gz"

ssh_port="`ss -ntpl|grep sshd|head -n 1|awk '{print $4}'|awk -F ':' '{print $NF}'`"
log $? "ssh port: $ssh_port"

basics_check(){
    check_status=0

    yum_status=`yum install gcc gcc-c++  zlib zlib-devel pam pam-devel tcp_wrappers tcp_wrappers-devel --nogpgcheck -y &> /dev/null && echo 0 || echo 1`
    file_status=`ls ${version}.tar.gz &> /dev/null && echo 0 || echo 1` 
    if [ $yum_status -eq 0 ];then
        log 0 "deply: gcc gcc-c++  zlib zlib-devel pam pam-devel tcp_wrappers tcp_wrappers-devel"
    else
        log 1 "deply: gcc gcc-c++  zlib zlib-devel pam pam-devel tcp_wrappers tcp_wrappers-devel"
        let check_status++
    fi
    if [ $file_status -ne 0 ];then
        log 1 "file: ${version}.tar.gz"
        echo "-----Download $url"
        wget $url &> /dev/null && log 0 "Download success" || (log 1 "Download failed"; let check_status++)
    else
        log 0 "file: ${version}.tar.gz"
    fi

    ssl_version=`openssl version |awk '{print $2}'|grep -Po '\d+.\d+.\d+'`
    if version_ge $ssl_version 1.1.1; then
        log 0 "openssl: $ssl_version"
    else
        log 1 "openssl: need >= 1.1.1"
        let check_status++
    fi

    [ $check_status -ne 0 ] && exit 1
}


pam_sshd(){
cat<<EOF > /etc/pam.d/sshd
#%PAM-1.0
auth       required pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF
}

openssh_install(){
  ssl_dir=`openssl version -a|grep OPENSSLDIR|tr -d '" '|awk -F ':' '{print $2}'|sed 's/\/ssl$//'`
  #OpenSSH
  cd $path
  [ ! -f ${version}.tar.gz ] && echo "package not found" && exit 
  tar xf ${version}.tar.gz
  cd ${version}
  sed -i 's#"OpenSSH\S*"#"OpenSSH_99.99"#g' version.h
  ./configure --prefix=/usr/local/${version} --sysconfdir=/usr/local/${version} -with-ssl-dir=${ssl_dir} --with-privsep-path=/var/myempty --with-privsep-user=sshd --with-zlib --with-ssl-engine --with-md5-passwords --disable-etc-default-login --with-pam=enable > ./configure.log && make > ./make.log && make install > ./make_install.log
  if [ $? -eq 0 ] ; then
    check 'PermitRootLogin' '/usr/local/'${version}'/sshd_config' 'PermitRootLogin yes'
    check 'UsePAM' '/usr/local/'${version}'/sshd_config' 'UsePAM yes'
    sed -i 's/#Port 22/Port '$ssh_port'/g' /usr/local/${version}/sshd_config
    pam_sshd
    /bin/cp -f contrib/redhat/sshd.init /etc/init.d/sshd
    
    sed -i 's/\/usr\/sbin\/sshd/\/usr\/local\/'${version}'\/sbin\/sshd/g' /etc/init.d/sshd
    chkconfig --add sshd
    chkconfig sshd on
    bin_file=(ssh scp ssh-keygen sftp)
    sbin_file=(sshd)
    for i in ${bin_file[@]}; do
      [  -f "/usr/bin/$i" ] && mv -f /usr/bin/$i /usr/bin/${i}.bak
      ln -s /usr/local/${version}/bin/$i /usr/bin/$i
    done
    for i in ${sbin_file[@]}; do
      [  -f "/usr/sbin/$i" ] && mv -f /usr/sbin/$i /usr/sbin/${i}.bak
      ln -s /usr/local/${version}/sbin/$i /usr/sbin/$i
    done
    chmod o+rx /usr/local/${version}/
    chmod o+rx /usr/local/${version}/bin
    chmod o+rx /usr/local/${version}/sbin

    touch /etc/ssh/ssh_host_ecdsa_key.pub
    if [ $osversion -eq 6 ]; then
        service sshd stop && service sshd start
    elif [ $osversion -eq 7 ]; then
        [ -f "/usr/lib/systemd/system/sshd.service" ] && mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
        systemctl daemon-reload
        systemctl restart sshd
    fi
    rm -rf $path/${version}
  else
    log 1 "openssh install faild" && exit 
  fi
  }

ssh_check(){
    for i in {1..10}; do
        service sshd status &> /dev/null
        if [ $? -eq 0 ]; then
            return 0
        else
            service sshd start
            sleep 1
        fi
    done
}

basics_check
openssh_install
ssh_check

1.普通用户无权限

chmod 755 -R /usr/local/openssh
在执行 sshd -t
将报错文件权限修改为600
即可

2.启动sshd服务报错

[ -f "/usr/lib/systemd/system/sshd.service" ] && mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
systemctl daemon-reload
systemctl restart sshd

3.openssl升级报错

修改/etc/ld.conf,添加新包编译安装的bin路径
ldconfig生效修改

openssl version 查看有无报错
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,764评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,235评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,965评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,984评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,984评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,471评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,844评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,818评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,359评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,385评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,515评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,114评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,836评论 3 338
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,291评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,422评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,064评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,581评论 2 365