安装软件以及原脚本。已经上传在附件里了。http://down.51cto.com/data/2228703


因为公司服务器及网络环境要进行安全审计。公司请绿盟的安全人员来对服务器做了一下安全监测,发现服务器上的openssl和openssh版本太老,存在安全漏洞。所以要对服务器的openssl和openssh进行升级到较新版本:openssh-7.12 openssl-1.0.1p。

    升级一定要注意做好老版本的备份,建议不要直接删除老版本的配置以及目录。之前看网上的资料好多直接删除了老版本的目录,如果升级失败,就没有了后退的余地了。

    为了,防止升级失败后,服务器不能登录的尴尬局面,建议先在服务器上安装Telnet。测试Telnet登录服务器没有问题后再进行升级操作。因为我公司用的是exsi虚拟化,所以我就没有安装Telnet。如果升级失败还可以vcenter登录。如果你是对物理机进行大规模升级,最好做下Telnet。不然到时候物理机都不能ssh登录。那你就去机房一个个填坑吧。。


服务器系统为centos6.7系统


升级注意:

  1.备份老版本的SSL SSH (不要直接删除)

  2.安装Telnet以防不测。

  3.不要轻易卸载openssl openssh的任何软件包。 (网络上一些文档建议卸载老版本的openssl,oepnssh以后再进行新版本的安装,经过我多次的安装,测试证明,是不需要卸载。如果你对这些软件包的功能 不熟悉,轻易卸载会导致系统的一些动态库出现问题,影响系统的正常使用。)

 4. 安装依赖包。gcc pam perl zlib 这些都是必须的。请事先安装好。


经过多次手动安装,我自己写了了一个自动安装的脚本。避免了繁杂枯燥的安装过程。此脚本已经在生产环境安装了几十台服务,目前没有发现存在问题。


判断系统是否安装pam和perl软件是否安装没有安装,就安装它。


#!/bin/bash

perl_package_path='/usr/local/'

perl_perl_package_namefull='perl-5.22.1.tar.gz'

perl_package_name='perl-5.22.1'


which perl

if [ $? -ne 0 ];then

echo  "prel没有安装,现在开始安装!!!"

sleep 3

cd ${perl_package_path}package/

tar zxf $perl_perl_package_namefull -C $perl_package_path

cd ${perl_package_path}$perl_package_name

./Configure -des -Dprefix=/usr/local/perl

make && make install

if [ $? = 0 ];then

echo "perl安装成功!!"

fi

if [ -e /usr/bin/perl  ] ;then

         mv /usr/bin/perl /usr/bin/perl_bak

         ln -s /usr/local/perl/bin/perl /usr/bin/perl

echo "请运行perl -v查看perl版本" 

else

echo "perl 安装可能有问题,请检查"

fi

else

echo "已经安装了prel"

fi


sleep 3


pam_number=$(rpm -q pam |wc -l)

pam_package_path="/usr/local/package/pam-1.1.1-20.el6_7.1.x86_64.rpm"

pam_package_path1="/usr/local/package/pam-devel-1.1.1-20.el6_7.1.x86_64.rpm"


if [ $pam_number -le 2 ];then

        echo "PAM模块没有安装"

        rpm -Uhv $pam_package_path --nodeps

        rpm  -Uhv $pam_package_path1 --nodeps

else

        echo "PAM模块已经安装"

fi

rpm -qa |grep pam



安装和升级openssl oepnssh


#!/bin/bash

package_path="/usr/local/"

ssh_versionfull="openssh-7.1p2.tar.gz"  #要解压的文件名字

ssh_version="openssh-7.1p2"     #解压后的目录


ssl_name="openssl-1.0.1p"

ssl_namefull="openssl-1.0.1p.tar.gz"

a=$(openssl version |awk '{print $1,$2}')

yum -y install gcc zlib openssl-devel

echo "当前openssl版本为 $a"

sleep 3


if [ "$a" == "OpenSSL 1.0.1p" ];then

   echo "OpenSSL 版本符合标准!!"

   exit

else

   echo "OpenSSL 不符合标准,将会被升级"

fi


sleep 3


if [ -f ${package_path}package/${ssl_namefull} ];then

   echo "前方高能的注意了,ssl要解压了!!!" && sleep 3

   tar zxf ${package_path}package/${ssl_namefull} -C $package_path

   mv /usr/bin/openssl /usr/bin/openssl_bak

   mv /usr/include/openssl/ /usr/include/openssl_bak

else

   echo "你的openssl文件不存在,请检查后重试"

fi


if [ -d ${package_path}${ssl_name} ];then

   cd ${package_path}${ssl_name}

   ./config  --prefix=/usr shared zlib-dynamic

   if [ $? = 0 ];then

        echo "编译成功,接下来进行安装!!!!!" && sleep 3

        make && make install

        if [ $? = 0 ];then

          echo "openssl-1.0.1p 安装成功."

        fi

   fi

else

   echo "哎呦,ssl加压后的包呢。快点去找出来。没解压成功吧!!!"

   sleep 5 && exit

fi

sleep 30


if [ -d $package_path ];then

   cd ${package_path}package/


   if [ -f $ssh_versionfull ];then

        tar zxf $ssh_versionfull -C /usr/local/

        if [ -f ${package_path}$ssh_version ];then

          cd ${package_path}$ssh_version

          echo "解压ssh完成,准备安装1!!!!!!"

        fi

   fi

fi


cp -rn /etc/ssh /etc/ssh_bak

cd ${package_path}$ssh_version

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-pam  --with-ssl


if [ $? = 0 ];then

  make && make install

  if [ $? = 0 ];then

    echo "ssh安装完成!!"

    sed -i "s/^GSSAPIAuthentication/#GSSAPIAuthentication/g" /etc/ssh/sshd_config

    sed -i "s/^GSSAPICleanupCredentials/#GSSAPICleanupCredentials/g" /etc/ssh/sshd_config

    #sed -i "s/^UsePAM/#UsePAM/g" /etc/ssh/sshd_config

   # cp -n /etc/ssh_bak/ssh_host_* /etc/ssh/ 

    cat /usr/local/package/suanfa.txt >> /etc/ssh/sshd_config

    service sshd restart

  fi

fi


不出意外等待几分钟。升级已经完成了,如果有意外,请根据提示解决问题。

用sshd -V 查看升级结果。

wKioL1eIotjSE_LdAAAM1BVUsIA010.png


升级完成后,并没有很顺利,还有比较多的问题在等着你去处理。



问题1:

  升级后ssh默认不允许root直接登录个人感觉这点在安全级别上还是挺不错的,如果你要用root登录。请坐一下操作

wKiom1eIo0jDk2KdAAGbtuUlQ40417.png


问题2. 使用ssh的ftp的时候报错。


wKiom1eIo0rgA2uvAAOAGX1npzM998.png

wKioL1eIo0uyZi4OAAG4Zdg-WLg462.png


问题3:使用xshell的ftp或者使用wscp软件提示 匹配不到算法 。比较不好解决的问题。原因是网上的参考资料不是太多。而且还不是很有用。

wKioL1eIo0zRWxLqAAN9J7muffE559.png

需要在sshd_conf里面添加新的算法。直接在配置文件末尾添加即可。我将这段算法的添加已经放在脚本里了。所以如果你是直接用我的脚本安装。不会出现这个错误的。


wKiom1eIpKWDoPJiAAAjjV1FaT4215.png