安装软件以及原脚本。已经上传在附件里了。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 查看升级结果。
升级完成后,并没有很顺利,还有比较多的问题在等着你去处理。
问题1:
升级后ssh默认不允许root直接登录个人感觉这点在安全级别上还是挺不错的,如果你要用root登录。请坐一下操作
问题2. 使用ssh的ftp的时候报错。
问题3:使用xshell的ftp或者使用wscp软件提示 匹配不到算法 。比较不好解决的问题。原因是网上的参考资料不是太多。而且还不是很有用。
需要在sshd_conf里面添加新的算法。直接在配置文件末尾添加即可。我将这段算法的添加已经放在脚本里了。所以如果你是直接用我的脚本安装。不会出现这个错误的。