自动升级OPENSSH shell脚本

由于管理着两百多台Linux服务器,一个人搞这么多机器的安全加固比较累,因此在学习了shell脚本之后果断的写了一些常用脚本做一些系统日常维护,本文OPENSSH的升级是博主本人几乎每两三个月就要做一次升级的,没办法绿盟安全扫描系统总是扫描到相关的高危漏洞,再就是OPENSSH版本更新的也比较频繁,因此不偷懒几乎没法活了。废话不说了,在这里贴下脚本,已经在线上服务器上执行了上百次了,应该不会有什么问题。

#!/bin/bash
#################################################################
######    update openssl openssh scirpt                 #########
#####             Author:kl                                 #####
######           Date:2014/07/13                            #####
######        LastModified:2016/06/02                     #######
####  Warning:start telnet service before use the script    #####
#################################################################

####################################################################################
#			update openssh and openssl
				#########
				  #####
				    ##
####################################################################################
#Determine whether the current system installed gcc compiler tools		

zlib_version="zlib-1.2.8"
openssl_version="openssl-1.0.2g"
openssh_version="openssh-7.2p2"

gcc_path=`which gcc`
#gcc_name=`basename $gcc_path`

DATE=$(date +%Y%m%d)

# OS TYPE
#Distributor_ID=$(lsb_release -i)
Distributor=`lsb_release -i|cut -c 17-`
# Determine whether the root user
userid=`id -u`
if [ "$userid" -ne 0 ]; then
	echo "sorry,only root can execute the script. "
	exit
fi

# SET SELINUX=disabled
if [ "$Distributor" != "SUSE LINUX" ]; then

	sed -i ‘/SELINUX/s/enforcing/disabled/‘ /etc/selinux/config
	setenforce 0
fi

# pam-devel,tcp_wrappers-devel need be installed, Otherwise, the software will install failure
# Support for tcpwrappers/libwrap has been removed in openssh6.7 

if ! rpm -qa|grep pam-devel &>/dev/null; then
	echo "pam-devel is not installed" && exit
fi

#if ! rpm -qa|grep tcp_wrappers-devel &>/dev/null; then
#	echo "tcp_wrappers-devel not installed" && exit
#fi

#  Check whether to open the telnet service

netstat -tnlp | grep -w 23

RETVAL3=$?
if [ $RETVAL3 -eq 0 ]; then
	echo "telnet service is running------------[yes]"
else
	echo "telnet service is not running--------[no]"
	exit
fi
# Determine whether to install gcc package
if [ -e "$gcc_path" ]; then
	echo "gcc is installed----------------[yes]"
else
	echo "gcc is not installed------------[no]"
	exit 
fi

# stop sshd service 
netstat -tnlp | grep -w 22
RETVAL4=$?
if [ $RETVAL4 -eq 0 ]; then
	service sshd stop
	echo "stop sshd service --------------[yes]"
fi

if [ -e /etc/init.d/sshd ]; then
cp /etc/init.d/sshd /root
fi

# remove openssh*.rpm if exists
if rpm -qa | grep openssh &> /dev/null;	then
rpm -qa | grep openssh > openssh_list.txt

while read line
do
	rpm -e $line --nodeps
	echo "remove $line success------------[yes]"
done < openssh_list.txt
fi

###########install zlib ##################
tar -zxvf "${zlib_version}.tar.gz" > /dev/null
cd $zlib_version
./configure

RETVAL5=$?

if [ $RETVAL5 -ne 0 ]; then
	echo "Configure zlib has encountered an error"
	exit
fi

make

RETVAL6=$?

if [ $RETVAL6 -ne 0 ]; then
	echo "make zlib has encountered an error"
	exit
fi

make install
cd ..
echo "#########################################################"
echo "################                        #################"
echo "################  zlib install success   #################"
echo "################                        #################"
echo "#########################################################"
sleep 2
########## install openssl #############
tar -zxvf "${openssl_version}.tar.gz" > /dev/null
cd $openssl_version
./config shared zlib

RETVAL7=$?

if [ $RETVAL7 -ne 0 ]; then
	echo "Configure openssl has encountered an error"
	exit
fi

make

RETVAL8=$?

if [ $RETVAL8 -ne 0 ]; then
	echo "make openssl has encountered an error"
	exit
fi

make install 

if [ -e /usr/bin/openssl ]; then
	mv /usr/bin/openssl /usr/bin/openssl.OFF && ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
else
	ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
fi

if [ -e /usr/include/openssl ]; then
	mv /usr/include/openssl /usr/include/openssl.OFF && ln -s /usr/local/ssl/include/openssl /usr/include/openssl
else
	ln -s /usr/local/ssl/include/openssl /usr/include/openssl
fi
## Add "/usr/local/ssl/lib" to /etc/ld.so.conf 
ssl_lib=`grep -w "/usr/local/ssl/lib" /etc/ld.so.conf` 
if [ ! -e "$ssl_lib" ]; then
	echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
fi

ldconfig -v

cd ..

echo "#########################################################"
echo "################                        #################"
echo "################ openssl install sucess  ################"
echo "################                        #################"
echo "#########################################################"
sleep 2
############# install openssh ##############
if [ -e /etc/ssh ]; then
	mv /etc/ssh /etc/ssh_$DATE
fi

tar -zxvf "${openssh_version}.tar.gz" > /dev/null
cd $openssh_version
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-pam --with-ssl-dir=/usr/local/ssl --with-md5-passwords

RETVAL9=$?

if [ $RETVAL9 -ne 0 ]; then
	echo "Configure openssh has encountered an error"
	exit
fi

make

RETVAL10=$?

if [ $RETVAL10 -ne 0 -a $RETVAL10 -ne 0 ]; then
        echo "make openssh has encountered an error"
        exit
fi

make install

if [ "$Distributor" == "SUSE LINUX" ]; then
	cd contrib/suse
	cp rc.sshd /etc/init.d/sshd
	chmod +x /etc/init.d/sshd
	chkconfig --add sshd
else

	cd contrib/redhat 
	cp sshd.init /etc/init.d/sshd
	chmod +x /etc/init.d/sshd
	chkconfig --add sshd

fi
#A generic PAM configuration is included as "contrib/sshd.pam.generic",
#you may need to edit it before using it on your system.

cd ..
cp sshd.pam.generic /etc/pam.d/sshd
sed -i ‘s/\/lib\/security\///g‘ /etc/pam.d/sshd

# Modify /etc/ssh/sshd_config
# Backup /etc/ssh/sshd_config
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak

# The default set of ciphers and MACs has been altered to
# remove unsafe algorithms. In particular, CBC ciphers and arcfour*
# are disabled by default. 
# Changes since OpenSSH 6.6
echo "KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,[email protected]" >> /etc/ssh/sshd_config
echo "Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc" >> /etc/ssh/sshd_config
echo "MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,hmac-sha1-96,hmac-md5-96" >> /etc/ssh/sshd_config

# Disable root access via ssh to server
#* The default for the sshd_config(5) PermitRootLogin option has changed from "yes" to "prohibit-password".
#* PermitRootLogin=without-password/prohibit-password now bans all
#interactive authentication methods, allowing only public-key,
#hostbased and GSSAPI authentication (previously it permitted
#keyboard-interactive and password-less authentication if those
#were enabled).
#PermitRootLogin prohibit-password is the default since version 7.0p1

sed -i ‘s/^#PermitRootLogin/PermitRootLogin/‘ /etc/ssh/sshd_config
#sed -i ‘/PermitRootLogin/s/yes/no/‘ /etc/ssh/sshd_config
sed -i ‘/PermitRootLogin/s/prohibit-password/no/‘ /etc/ssh/sshd_config

# Set ‘UsePAM no‘ to ‘UsePAM yes‘ to enable PAM authentication, account processing, 
# and session processing
sed -i ‘/^#UsePAM no/a UsePAM yes‘ /etc/ssh/sshd_config

# Start sshd process
service sshd start

# Disable telnet service
if netstat -tnlp | grep -w 22 &> /dev/null; then

sed -i ‘/disable/s/no/yes/‘ /etc/xinetd.d/telnet

service xinetd restart

fi

echo "#########################################################"
echo "################                        #################"
echo "################ openssh install sucess  ################"
echo "################                        #################"
echo "#########################################################"

echo "###############   ssh version     ################################################# "
echo "################################################################################### "
sshd -v
echo "#################################################################################### "
echo "#################################################################################### "
时间: 2024-10-14 00:42:01

自动升级OPENSSH shell脚本的相关文章

把ps -ef &amp; kill指令写成可以自动执行的shell脚本

之前重启服务器上的服务,均是先使用ps -ef | grep xxx指令查询出PID,然后再使用kill -9 PID指令杀死进程.由于重启的服务只止一个,每次都要重复输入,甚是麻烦. 示例 今天研究了一下,把以上手动查杀.重启服务的过程写成了shell脚本,重启服务只需执行脚本就可以了.附脚本样例: 1 #!/bin/sh 2 3 # restart das-web 4 ps -ef | grep /home/***/das-web/ | awk '{print $2}' | xargs -n

Lvs别样的自动部署监控shell脚本

Lvs别样的自动部署监控shell脚本   l 脚本功能: l 实验环境图: l 具体脚本: l 结果验证: l 参考资料: 先申明,本文现在已经在我公司的测试环境和生产测试环境使用.正式环境请用keepalived+lvs. 安装ipvsadm不多说了,先说说脚本的功能,脚本分为redirect server 端和realserver 端,脚本分别为 lvs_redirector.sh 和realserver.sh脚本.另外加一个监控脚本lvs_monitor.sh(此脚本来源网友,做了一点修

mysql自动备份维护shell脚本

/opt/backup_online.sh #!/bin/bash#功能说明:本功能用于备份数据库 #数据库用户名dbuser='root'#数据库密码dbpasswd='zLaaa'#数据库名,可以定义多个数据库,中间以空格隔开,如:test test1 test2dbname='adb bdb '#备份时间backtime=`date +%Y%m%d%H%M%S`#日志备份路径logpath='/opt/garbageBackup/'#数据备份路径datapath='/opt/garbage

Ubuntu 设定壁纸自动切换的shell脚本

升级到Ubuntu14.04后,感觉bug的确比12.04少多了.顶部任务栏支持半透明效果,所以整个桌面也看上去漂亮了很多.这样的桌面也是值得瞎捣鼓一下的,想到换壁纸,但是没找到设定动态更换壁纸的选项,但手动修改配置文件的方法总是有的,本文的目的也在于此.(以下过程在Ubuntu14上进行,未测试其他版本!). 原理 右键桌面->更改桌面背景,如下图所示,在右侧缩略图中带有小钟表图标的就表示为动态切换的壁纸: 系统是通过读取这个文件来进行动态壁纸切换的: /usr/share/backgroun

linux下监视进程挂掉后自动重启的shell脚本

本文介绍的这个shell脚本,通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,确保崩溃挂掉的进程,及时自动重启. 脚本内容如下: #!/bin/sh while : do echo "Current DIR is " $PWD stillRunning=$(ps -ef |grep "$PWD/loader" |grep -v "grep") if [ "$stillRun

自动抓包shell脚本

由于机房核心下的客户众多,其中不免很多大客户,正所谓树大招风,近期机房某些客户总是被流量攻击,预防的办法也只能是找到具体被攻击的ip地址,然后在上层核心将该ip配置空路由将攻击流量拦截在骨干层,以免影响其他用户的正常使用,目前我每台核心都做了镜像端口,将上联流量镜像到一台centos的抓包服务器,每次发生故障的时候直接tcpdump抓包来分析,但是近期攻击都在半夜,爬起来去抓包的时候攻击都已经停了,不要说去解决问题了,连后期的故障说明都没法出:所以为了保留抓包的数据,在网上找了些资料根据环境测试

linux下监视进程 崩溃挂掉后自动重启的shell脚本

如何保证服务一直运行?如何保证即使服务挂掉了也能自动重启?在写服务程序时经常会碰到这样的问题.在Linux系统中,强大的shell就可以很灵活的处理这样的事务. 下面的shell通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,这样就保证了崩溃挂掉的进程重新被及时启动. 必须注意两点: 1.ps |grep 一个进程时必须加上其路劲,否则容易grep到错误的结果: 2.必须用 -v 从结果中去除grep命令自身,否则结果非空. 复制代

Ubuntu 14.04 下自动安装mongodb shell 脚本

vim mongodb_install.sh #!/bin/bash cd /opt/ echo "Download mongdb software..." wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.0.4.tgz echo " mongdb software..." tar -zxf mongodb-linux*.tgz mkdir software mv mon

分享一个很实用的svn自动merge的shell脚本

正在上传中...... 预计8月15前完成