#!/bin/bash
#
############################## 蜈蚣出品 #############################
# Function : openssl openssh update #
# Platform : Centos6.x - Centos8.x & Rocky8.x & openEuler 20.x-22.x #
# Version : 2.4 #
# Date : 2024-01-01 #
#####################################################################
#
# RHEL8系列操作系统恢复使用旧库,解决编译安装Openssl出现的libssl及libcrypto版本不匹配问题。
# 使用旧库将导致openssl程序版本号与库版本号不一致的问题,暂无完美解决方法。
#
clear
export LANG="en_US.UTF-8"
date_time=$(date +%Y%m%d-%H%M%S)
OLD_IFS=$IFS
IFS=$' '
#
#请根据官方发行的版本号按需要安装的版本修改 <<==================================
zlib_version="zlib-1.3"
openssl_version="openssl-1.1.1w"
openssh_version="openssh-9.6p1"
#源码包链接
zlib_url="https://www.zlib.net/fossils/$zlib_version.tar.gz"
openssl_url="https://www.openssl.org/source/$openssl_version.tar.gz"
openssh_url="https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/$openssh_version.tar.gz"
#安装包路径建议根据安装脚本上传的位置修改 <<==================================
upsslssh_home="/home/szcmt/hss/upsslssh"
#默认编译路径
install_path="/usr/local"
#安装目录
install_files="$upsslssh_home/install"
backup_files="$upsslssh_home/backup"
log_files="$upsslssh_home/log"
#需要安装的依赖包
pkg_need="gcc gcc-c++ glibc make autoconf automake openssl openssl-devel pam pam-devel zlib zlib-devel wget tar pcre-devel"
#输出信息颜色
color_0="\033[0m"
color_R="\033[31m"
color_G="\033[32m"
color_Y="\033[33m"
color_C="\033[36m"
#判断是否root用户
if [ $(id -u) != "0" ] ; then
echo -e "\n"
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前用户为普通用户,必须使用root用户运行,脚本退出. . ."
sleep 0.25
echo -e "\n"
exit
fi
#获取软件版本信息
las_zlib_version=$(echo $zlib_version | awk -F "-" '{print $2}')
las_openssl_version=$(echo $openssl_version | awk -F "-" '{print $2}')
las_openssh_version=$(echo $openssh_version | awk -F "-" '{print $2}')
old_zlib_version=$(find /usr/local -name "zlib-*" | awk -F "-" '{print $2'})
old_openssl_version=$(openssl version 2>&1 | awk -F" " '{print $2}' | awk -F"-" '{print $1}')
old_openssh_version=$(ssh -V 2>&1 | awk -F"," '{print $1}' | awk -F"_" '{print $2}')
if [[ $(openssl version 2>&1) =~ Library ]] ; then
os_openssl_version=$(openssl version 2>&1 | awk -F"Library" '{print $2}' | awk -F" " '{print $3}')
fi
echo -e "\n"
Install_make()
{
if [[ -e /etc/redhat-release ]] || [[ -e /etc/openEuler-release ]] || [[ -e /etc/hce-release ]] ; then
if [ -e /etc/redhat-release ] ; then
redhat_version=`cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
if [[ $redhat_version -lt 6 || $redhat_version -gt 8 ]] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前操作系统版本可能不被支持,脚本退出. . ."
sleep 0.25
echo -e "\n"
exit
fi
fi
if [ -e /etc/openEuler-release ] ; then
openeuler_version=`cat /etc/openEuler-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
if [[ $openeuler_version -lt 20 || $openeuler_version -gt 22 ]] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前操作系统版本可能不被支持,脚本退出. . ."
sleep 0.25
echo -e "\n"
exit
fi
fi
if [ -e /etc/hce-release ] ; then
hce_version=`cat /etc/hce-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
if [[ $hce_version -lt 1 || $hce_version -gt 2 ]] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前操作系统版本可能不被支持,脚本退出. . ."
sleep 0.25
echo -e "\n"
exit
fi
fi
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前操作系统可能不被支持,脚本退出. . ."
sleep 0.25
echo -e "\n"
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"即将升级Zlib版本至$las_zlib_version,升级OpenSSL版本至$las_openssl_version,升级OpenSSH版本至$las_openssh_version,"$color_0
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"升级过程中请保持活动的连接窗口,切勿中途中断!为避免升级失败无法重连服务器,"$color_0
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"请复制一个连接窗口以备不时之需,或自行配置Telnet服务预留另一个远程连接通道。"$color_0
echo -en `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"升级脚本即将开始,如暂不升级请在倒计时结束前按Ctrl+C终止脚本,倒计时: "$color_0
count=11
tput sc
while true
do
if [ $count -ge 1 ] ; then
let count--
sleep 1
tput rc
tput ed
echo -en $color_R"$count "$color_0
else
break
fi
done
echo -e ""
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在创建过程目录. . ."
sleep 0.25
#创建文件
mkdir -p $install_files
mkdir -p $backup_files
mkdir -p $log_files
mkdir -p $backup_files/zlib
mkdir -p $backup_files/ssl
mkdir -p $backup_files/ssh
mkdir -p $log_files/yuminstall
mkdir -p $log_files/zlib
mkdir -p $log_files/ssl
mkdir -p $log_files/ssh
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在关闭SELINUX. . ."
sleep 0.25
sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
setenforce 0 >/dev/null 2>&1
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在重建yum源缓存. . ."
sleep 0.25
yum clean all >/dev/null 2>&1
yum makecache >> $log_files/yuminstall/yummakecache.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "重建yum源缓存成功"
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "重建yum源缓存失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在安装依赖包. . ."
sleep 1
for pkg_need_i in $pkg_need ; do
yum install -y $pkg_need_i --nogpgcheck >> $log_files/yuminstall/yuminstall.$pkg_need_i.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "安装包"$color_C"$pkg_need_i"$color_0"已安装或安装成功"
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "安装软件依赖包$pkg_need_i失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
done
}
Install_backup()
{
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在备份相关文件. . ."
sleep 0.25
\cp -rfL /usr/bin/openssl $backup_files/ssl/openssl.$old_openssl_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /etc/init.d/sshd $backup_files/ssh/sshd.$old_openssh_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /etc/ssh $backup_files/ssh/ssh.$old_openssh_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /usr/bin/ssh-copy-id $backup_files/ssh/ssh-copy-id.$old_openssh_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /usr/lib/systemd/system/sshd.service $backup_files/ssh/sshd.service.$old_openssh_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /etc/pam.d/sshd.pam $backup_files/ssh/sshd.pam.$old_openssh_version.$date_time.bak >/dev/null 2>&1
\cp -rfL /etc/pam.d/sshd $backup_files/ssh/sshd.$old_openssh_version.$date_time.bak >/dev/null 2>&1
}
Install_tar()
{
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查$zlib_version.tar.gz源码包. . ."
sleep 0.25
if [ -e $upsslssh_home/$zlib_version.tar.gz ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "源码包$zlib_version.tar.gz已存在"
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "未发现$zlib_version.tar.gz源码包,正在从配置的链接中获取. . ."
sleep 0.25
cd $upsslssh_home
wget --no-check-certificate $zlib_url >> $log_files/zlib/zlib_wget.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$zlib_version.tar.gz下载完成"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$zlib_version.tar.gz下载失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在测试$zlib_version.tar.gz源码包. . ."
tar -tzf $upsslssh_home/$zlib_version.tar.gz >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$zlib_version.tar.gz测试正常"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$zlib_version.tar.gz测试失败,请删除后重新下载,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查$openssl_version.tar.gz源码包. . ."
sleep 0.25
if [ -e $upsslssh_home/$openssl_version.tar.gz ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "源码包$openssl_version.tar.gz已存在"
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "未发现$openssl_version.tar.gz源码包,正在从配置的链接中获取. . ."
sleep 0.25
cd $upsslssh_home
wget --no-check-certificate $openssl_url >> $log_files/ssl/ssl_wget.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssl_version.tar.gz下载完成"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssl_version.tar.gz下载失败,脚本退出. . ."
sleep 0.25
End_install
exit 1
fi
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在测试$openssl_version.tar.gz源码包. . ."
tar -tzf $upsslssh_home/$openssl_version.tar.gz >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssl_version.tar.gz测试正常"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssl_version.tar.gz测试失败,请删除后重新下载,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查$openssh_version.tar.gz源码包. . ."
sleep 0.25
if [ -e $upsslssh_home/$openssh_version.tar.gz ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "源码包$openssh_version.tar.gz已存在"
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "未发现$openssh_version.tar.gz源码包,正在从配置的链接中获取. . ."
sleep 0.25
cd $upsslssh_home
wget --no-check-certificate $openssh_url >> $log_files/ssh/ssh_wget.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssh_version.tar.gz下载完成"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssh_version.tar.gz下载失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在测试$openssh_version.tar.gz源码包. . ."
tar -tzf $upsslssh_home/$openssh_version.tar.gz >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssh_version.tar.gz测试正常"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssh_version.tar.gz测试失败,请删除后重新下载,脚本退出. . ."
sleep 0.25
End_install
exit
fi
}
Install_zlib()
{
if [ "$old_zlib_version" == "$las_zlib_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "zlib已是最新版本zlib-$old_zlib_version无需升级"
return
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在解压$zlib_version.tar.gz源码包. . ."
sleep 0.25
cd $upsslssh_home && mkdir -p $install_files && tar -zxvf $zlib_version.tar.gz -C $install_files > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$zlib_version.tar.gz解压成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$zlib_version.tar.gz解压失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$zlib_version. . ."
cd $install_files/$zlib_version
./configure --prefix=$install_path/$zlib_version >> $log_files/zlib/zlib_configure.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$zlib_version --> make clean. . ."
make clean > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$zlib_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$zlib_version --> make. . ."
make >> $log_files/zlib/zlib_make.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$zlib_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$zlib_version --> make install. . ."
make install >> $log_files/zlib/zlib_makeinsall.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$zlib_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$zlib_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
if [ -e $install_path/$zlib_version/lib/libz.so ] ; then
grep -v "^#" /etc/ld.so.conf | grep 'zlib' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在注释/etc/ld.so.conf旧配置信息. . ."
sed -i "/zlib/ s/^\(.*\)$/#\1/g" /etc/ld.so.conf
fi
grep -v "^#" /etc/ld.so.conf.d/zlib.conf 2>&1 | grep 'zlib' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
sed -i "/zlib/ s/^\(.*\)$/#\1/g" /etc/ld.so.conf.d/zlib.conf > /dev/null 2>&1
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在更新/etc/ld.so.conf配置信息. . ."
echo "$install_path/$zlib_version/lib" >> /etc/ld.so.conf
rm -rf /etc/ld.so.cache
ldconfig -v >> $log_files/zlib/zlib_ldconfig.$date_time.txt 2>&1
ldconfig
fi
new_zlib_version=$(find /usr/ -name zlib.pc | awk -F "-" '{print $2'} | awk -F "/lib" '{print $1}' | tr '\r\n' ' ' | sed -e 's/,$/\n/' | sed 's/\s*//g')
if [ "$new_zlib_version" == "$las_zlib_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "$zlib_version升级成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "$zlib_version升级失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
}
Install_openssl()
{
if [ "$old_openssl_version" == "$las_openssl_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "openssl已是最新版本openssl-$old_openssl_version无需升级"
return
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在解压$openssl_version.tar.gz源码包. . ."
sleep 0.25
cd $upsslssh_home && tar -zxvf $openssl_version.tar.gz -C $install_files > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssl_version.tar.gz解压成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssl_version.tar.gz解压失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssl_version. . ."
cd $install_files/$openssl_version
./config shared zlib --prefix=$install_path/$openssl_version >> $log_files/ssl/ssl_config.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssl_version --> make clean. . ."
make clean > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssl_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssl_version --> make -j 4. . ."
make -j 4 >> $log_files/ssl/ssl_make.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssl_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssl_version --> make install. . ."
make install >> $log_files/ssl/ssl_makeinstall.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssl_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssl_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
mv /usr/bin/openssl /usr/bin/openssl.$old_openssl_version.$date_time.bak > /dev/null 2>&1
if [ -e $install_path/$openssl_version/bin/openssl ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在创建openssl软链接. . ."
sleep 0.25
ln -s $install_path/$openssl_version/bin/openssl /usr/bin/openssl
\cp -rfL $install_path/$openssl_version/lib/libssl.so.1.1 /usr/lib64/libssl.so.${openssl_version:8}
\cp -rfL $install_path/$openssl_version/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.${openssl_version:8}
cd /usr/lib64
rm -rf libssl.so
ln -s libssl.so.${openssl_version:8} libssl.so
rm -rf libcrypto.so
ln -s libcrypto.so.${openssl_version:8} libcrypto.so
cd
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在注释/etc/ld.so.conf旧配置信息. . ."
grep -v "^#" /etc/ld.so.conf | grep 'openssl' > /dev/null 2>&1
if [ $? -eq 0 ];then
sed -i "/openssl/ s/^\(.*\)$/#\1/g" /etc/ld.so.conf > /dev/null 2>&1
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在更新/etc/ld.so.conf配置信息. . ."
#echo -e "/usr/lib64" >> /etc/ld.so.conf
#echo -e "$install_path/$openssl_version/lib/" >> /etc/ld.so.conf
rm -rf /etc/ld.so.cache
ldconfig -v >> $log_files/ssl/ssl_ldconfig.$date_time.txt 2>&1
ldconfig
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "编译安装$openssl_version成功"
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在输出openssl版本信息. . ."
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"`openssl version`"$color_0
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "创建openssl软连接失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
new_openssl_version=$(openssl version 2>&1 | awk -F" " '{print $2}' | awk -F"-" '{print $1}')
if [ "$new_openssl_version" == "$las_openssl_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "$openssl_version升级成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "$openssl_version升级失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
}
Remove_openssh()
{
if [ "$old_openssh_version" == "$las_openssh_version" ] ; then
return
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在卸载openssh旧版本. . ."
sleep 0.25
rpm -e --nodeps openssh-$old_openssh_version > /dev/null 2>&1
rpm -e --nodeps openssh-server-$old_openssh_version > /dev/null 2>&1
rpm -e --nodeps openssh-clients-$old_openssh_version > /dev/null 2>&1
}
Install_openssh()
{
if [ "$old_openssh_version" == "$las_openssh_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "openssh已是最新版本openssh-$old_openssh_version无需升级"
return
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在解压$openssh_version.tar.gz源码包. . ."
sleep 0.25
cd $upsslssh_home && tar -zxvf $openssh_version.tar.gz -C $install_files > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "源码包$openssh_version.tar.gz解压成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "源码包$openssh_version.tar.gz解压失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssh_version. . ."
mv /etc/ssh /etc/ssh.$date_time.bak > /dev/null 2>&1
cd $install_files/$openssh_version
./configure --prefix=$install_path/$openssh_version --sysconfdir=/etc/ssh --with-ssl-dir=$install_path/$openssl_version --with-zlib=$install_path/$zlib_version --without-zlib-version-check --with-md5-passwords --with-pam >> $log_files/ssh/ssh_configure.$date_time.txt 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssh_version --> make clean. . ."
make clean > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssh_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssh_version --> make -j 4. . ."
make -j 4 >> $log_files/ssh/ssh_make.$date_time.txt > /dev/null 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssh_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在编译安装$openssh_version --> make install. . ."
make install >> $log_files/ssh/ssh_makeinstall.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssh_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "编译安装$openssh_version失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "编译安装$openssh_version成功"
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在迁移openssh配置文件. . ."
sleep 0.25
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.$date_time.bak > /dev/null 2>&1 #备份启动脚本,不一定有
mv /etc/init.d/sshd /etc/init.d/sshd.$date_time.bak > /dev/null 2>&1 #备份sshd文件,不一定有
\cp -rfL $install_files/$openssh_version/contrib/redhat/sshd.init /etc/init.d/sshd > /dev/null 2>&1
mv /etc/pam.d/sshd.pam /etc/pam.d/sshd.pam.$date_time.bak > /dev/null 2>&1 #备份sshd.pam文件,不一定有
\cp -rfL $install_files/$openssh_version/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam > /dev/null 2>&1
mv /usr/libexec/openssh/sftp-server /usr/libexec/openssh/sftp-server.$date_time.bak > /dev/null 2>&1 #备份sftp-server文件,不一定有
\cp -rfL $install_path/$openssh_version/libexec/sftp-server /usr/libexec/openssh/sftp-server > /dev/null 2>&1
if [[ $redhat_version -lt 7 ]] ; then
mv /usr/libexec/sftp-server /usr/libexec/sftp-server.$date_time.bak > /dev/null 2>&1 #备份sftp-server文件,不一定有
\cp -rfL $install_path/$openssh_version/libexec/sftp-server /usr/libexec/sftp-server > /dev/null 2>&1
fi
\cp -rfL $install_path/$openssh_version/sbin/sshd /usr/sbin/sshd > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/scp /usr/bin/scp > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/sftp /usr/bin/sftp > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/ssh /usr/bin/ssh > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/ssh-add /usr/bin/ssh-add > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/ssh-agent /usr/bin/ssh-agent > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/ssh-keygen /usr/bin/ssh-keygen > /dev/null 2>&1
\cp -rfL $install_path/$openssh_version/bin/ssh-keyscan /usr/bin/ssh-keyscan > /dev/null 2>&1
\cp -rfL $backup_files/ssh/ssh-copy-id.$old_openssh_version.$date_time.bak /usr/bin/ssh-copy-id > /dev/null 2>&1
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在配置openssh服务及开机自启. . ."
sleep 0.25
chmod u+x /etc/init.d/sshd > /dev/null 2>&1
chkconfig --add sshd > /dev/null 2>&1
chkconfig sshd on > /dev/null 2>&1
chkconfig --list > $backup_files/ssh/sshservice.txt 2>&1 && cat $backup_files/ssh/sshservice.txt | grep sshd >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "配置openssh服务及开机自启成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "配置openssh服务及开机自启失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在修改openssh配置文件. . ."
sleep 0.25
if [ -e $backup_files/ssh/ssh.$old_openssh_version.$date_time.bak/sshd_config ] ; then
\cp -rfL $backup_files/ssh/ssh.$old_openssh_version.$date_time.bak/sshd_config /etc/ssh/sshd_config > /dev/null 2>&1
else
if [ ! -e /etc/ssh/sshd_config ] ; then
\cp -rfL $install_files/$openssh_version/sshd_config /etc/ssh/sshd_config > /dev/null 2>&1
fi
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "为确保登陆正常,配置文件将被修改为"$color_R"允许root登陆"$color_0". . ."
sleep 0.25
grep -P "^#PasswordAuthentication|^\s*PasswordAuthentication" /etc/ssh/sshd_config >/dev/null 2>&1
if [ $? -eq 0 ] ; then
sed -i "/^\s*PasswordAuthentication/ s/^\s*//" /etc/ssh/sshd_config
sed -i "/^\s*PasswordAuthentication/ s/^\(.*\)$/#\1/g" /etc/ssh/sshd_config
sed -i "0,/^#PasswordAuthentication.*/s/^#PasswordAuthentication.*/PasswordAuthentication yes/" /etc/ssh/sshd_config
else
echo -e "\nPasswordAuthentication yes" >> /etc/ssh/sshd_config
fi
grep -P "^#PermitRootLogin|^\s*PermitRootLogin" /etc/ssh/sshd_config >/dev/null 2>&1
if [ $? -eq 0 ] ; then
sed -i "/^\s*PermitRootLogin/ s/^\s*//" /etc/ssh/sshd_config
sed -i "/^\s*PermitRootLogin/ s/^\(.*\)$/#\1/g" /etc/ssh/sshd_config
sed -i "0,/^#PermitRootLogin.*/s/^#PermitRootLogin.*/PermitRootLogin yes/" /etc/ssh/sshd_config
else
echo -e "\nPermitRootLogin yes" >> /etc/ssh/sshd_config
fi
grep -P "^#UsePAM|^\s*UsePAM" /etc/ssh/sshd_config >/dev/null 2>&1
if [ $? -eq 0 ] ; then
sed -i "/^\s*UsePAM/ s/^\s*//" /etc/ssh/sshd_config
sed -i "/^\s*UsePAM/ s/^\(.*\)$/#\1/g" /etc/ssh/sshd_config
sed -i "0,/^#UsePAM.*/s/^#UsePAM.*/UsePAM yes/" /etc/ssh/sshd_config
else
echo -e "\nUsePAM yes" >> /etc/ssh/sshd_config
fi
if [ ! -e "/etc/pam.d/sshd" ] ; then
if [ -e "$backup_files/ssh/sshd.$old_openssh_version.$date_time.bak" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在恢复/etc/pam.d/sshd文件. . ."
\cp -rfL $backup_files/ssh/sshd.$old_openssh_version.$date_time.bak /etc/pam.d/sshd >/dev/null 2>&1
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在创建/etc/pam.d/sshd文件. . ."
if [[ $redhat_version -gt 4 && $redhat_version -lt 7 ]] ; then
cat > /etc/pam.d/sshd << EOF
#%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
fi
if [[ $redhat_version -gt 6 ]] || [[ $openeuler_version -gt 19 ]] || [[ $hce_version -gt 0 ]] ; then
cat > /etc/pam.d/sshd << EOF
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
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 required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
EOF
fi
fi
sleep 0.25
fi
sshdbadconfig=`sshd -T 2>&1 | grep -P "^/etc/.*line.*option" | wc -l`
if [ $sshdbadconfig -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在修复openssh错误配置. . ."
sshd -T >> $log_files/ssh/sshd_information.$date_time.txt 2>&1
service sshd status >> $log_files/ssh/sshd_service.$date_time.txt 2>&1
sshd -T 2>&1 | grep -P "^/etc/.*Unsupported option" | awk -F' ' '($5=="option"){print $6}' | sed -e 's/\r$//' | tr "\n" " " | sed -e 's/,$/\n/' > /tmp/sshdconfig
sshd -T 2>&1 | grep -P "^/etc/.*Deprecated option" | awk -F' ' '($5=="option"){print $6}' | sed -e 's/\r$//' | tr "\n" " " | sed -e 's/,$/\n/' >> /tmp/sshdconfig
sshd -T 2>&1 | grep -P "^/etc/.*Bad configuration option" | awk -F' ' '($6=="option:"){print $7}' | sed -e 's/\r$//' | tr "\n" " " | sed -e 's/,$/\n/' >> /tmp/sshdconfig
sleep 0.25
for sshdconfig in $(cat /tmp/sshdconfig); do
sed -i "/^\s*$sshdconfig/ s/^\(.*\)$/#\1/g" /etc/ssh/sshd_config
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在注释openssh错误配置"$color_C"$sshdconfig"$color_0". . ."
sleep 0.25
done
rm -rf /tmp/sshdconfig
fi
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在重新加载系统服务配置文件. . ."
if [[ $redhat_version -gt 4 && $redhat_version -lt 7 ]] ; then
chkconfig daemon-reload
fi
if [[ $redhat_version -gt 6 ]] || [[ $openeuler_version -gt 19 ]] || [[ $hce_version -gt 0 ]] ; then
systemctl daemon-reload
fi
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在重启openssh服务. . ."
service sshd start >> $log_files/ssh/sshd_service.$date_time.txt 2>&1 && service sshd restart >> $log_files/ssh/sshd_service.$date_time.txt 2>&1
if [ $? -ne 0 ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "启动openssh服务失败,脚本退出. . ."
sshd -T >> $log_files/ssh/sshd_information.$date_time.txt 2>&1
service sshd status >> $log_files/ssh/sshd_service.$date_time.txt 2>&1
sleep 0.25
End_install
exit
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "启动openssh服务成功"
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在输出openssh版本信息. . ."
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"`ssh -V 2>&1`"$color_0
fi
sleep 0.25
new_openssh_version=$(ssh -V 2>&1 | awk -F"," '{print $1}' | awk -F"_" '{print $2}')
if [ "$new_openssh_version" == "$las_openssh_version" ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "$openssh_version升级成功"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "$openssh_version升级失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
}
RHEL8_repair()
{
if [[ $redhat_version -gt 7 && $redhat_version -lt 9 ]] || [[ $openeuler_version -gt 19 && $openeuler_version -lt 23 ]] || [[ $hce_version -gt 0 && $hce_version -lt 3 ]] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在将RHEL8系列操作系统恢复openssl相关库文件为旧库. . ."
sleep 0.25
if [ $os_openssl_version ] ; then
old_openssl_version="$os_openssl_version"
fi
if [ -e /usr/lib64/libssl.so.$old_openssl_version ] ; then
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在恢复旧库openssl软链接. . ."
sleep 0.25
cd /usr/lib64
rm -rf libssl.so.${openssl_version:8}
rm -rf libcrypto.so.${openssl_version:8}
rm -rf libssl.so.1.1
ln -s libssl.so.$old_openssl_version libssl.so.1.1 > /dev/null 2>&1
rm -rf libssl.so
ln -s libssl.so.$old_openssl_version libssl.so
rm -rf libcrypto.so.1.1
ln -s libcrypto.so.$old_openssl_version libcrypto.so.1.1 > /dev/null 2>&1
rm -rf libcrypto.so
ln -s libcrypto.so.$old_openssl_version libcrypto.so
cd
rm -rf /etc/ld.so.cache
ldconfig -v >> $log_files/ssl/ssl_ldconfig.$date_time.txt 2>&1
ldconfig
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "恢复openssl旧库文件成功"
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在输出openssl版本信息. . ."
sleep 0.25
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 $color_C"`openssl version`"$color_0
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "恢复旧库的openssl会出现主版本号与库版本号不一致问题"
sleep 0.25
else
echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "恢复openssl旧库文件失败,脚本退出. . ."
sleep 0.25
End_install
exit
fi
fi
}
End_install()
{
chown `logname`.`logname` $upsslssh_home -R
rm -rf $upsslssh_home/*$zlib_version.tar.gz
rm -rf $upsslssh_home/*$openssl_version.tar.gz
rm -rf $upsslssh_home/*$openssh_version.tar.gz
#rm -rf $install_files
echo -e "\n"
echo -e $color_G"======================== install file ========================"$color_0
echo -e ""
echo -e "升级安装目录请前往: "
cd $install_files && pwd
cd ~
echo -e ""
echo -e "升级备份目录请前往: "
cd $backup_files && pwd
cd ~
echo -e ""
echo -e "升级日志目录请前往: "
cd $log_files && pwd
cd ~
echo -e ""
echo -e $color_G"=============================================================="$color_0
echo -e "\n"
IFS=$OLD_IFS
sleep 1
}
Install_make
Install_backup
Install_tar
Install_zlib
Install_openssl
Remove_openssh
Install_openssh
RHEL8_repair
End_install
#脚本思路致谢CSDN柒八九 https://blog.csdn.net/wlc_1111/article/details/125228426
文章浏览阅读315次。安装dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件sudo dpkg -i xxx.deb (需要本地有下载好的deb文件)apt会解决和安装模块的依赖问题,并会咨询软件仓库, 但不会安装本地的deb文件, apt是建立在dpkg之上的软件管理工具sudo apt install packagename卸载sudo apt-get remove packagename 只删除软件,不删除配置文件sudo apt-_sudo apt-get --purge remove package_name
文章浏览阅读1.3w次,点赞10次,收藏66次。上一讲介绍了GTest的安装和如何在项目中使用GTest,这一讲主要介绍GTest的断言机制和宏测试断言GTest采用一系列的断言(assertion)来进行代码测试,这些宏有点类似于函数调用。当断言失败时Google Test将会打印出assertion时的源文件和出错行的位置,以及附加的失败信息。用户可以直接通过“<<”在这些断言宏后面跟上自己希望在断言命中时的输出信息。..._gtest failed的case输出什么
文章浏览阅读324次。DescriptionGiven two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponenti_kmp_schedule
文章浏览阅读1.2w次,点赞7次,收藏77次。标准差分进化算法_de算法
文章浏览阅读599次。作者git地址:https://github.com/chenlinzhong/face-login人脸检测MTCNN文件:fcce_detect.pymodel= os.path.abspath(face_comm.get_conf('mtcnn','model'))class Detect: def __init__(self): self.detector ..._tensorflow人脸注册
文章浏览阅读278次。Context提供了一种不需要手动地通过props来层层传递的方式来传递数据。_react context
文章浏览阅读2.6k次,点赞3次,收藏25次。linux系统编程-网络编程_linux网络编程
文章浏览阅读1.7k次。我们都知道的是cascade强调的是操作关联对象,inverse强调的是外键的维护权。在我们设置了级联操作后,在保存的时候就会级联保存另外的级联对象,而设置了inverse之后,如果两个对象之间有双向维护关系,就会在设置的一方放弃外键维护权,那它们两个共同使用的时候会产生什么结果呢? 我们可以通过一个简单的案例测试一下,就能得到结果,案例中customer与linkman为一对多关_java面试 cascade和inverse
文章浏览阅读2.9k次。假定s_user_info表内主键uid设置了auto_increment属性,且该主键的type为int,如果想删除auto_increment属性,那么直接修改下type就ok了。sql语句:alter table s_user_info modify uid int(11);执行后再次desc s_user_info;下查看表字段描述会发现uid的auto_increment属性_mysql删除auto_increment
文章浏览阅读4k次。队列的基本操作本题重新定义队列出队的操作:队首出队的数字重新在队尾入队。例:队列中有1 2 3三个数字,现要求队首出队,则1从队首出队,同时1从队尾入队,队列变成2 3 1。 入队的顺序为1,2,3,4…n,同时给一个二进制字符串,1代表出队操作,0代表入队操作。输入格式:在第一行有两个数字n,m(n<=100,n<m),其中n为入队的数字个数,m代表操作数。接下来m行,每行一个数字,1或者0,代表不同的操作。输出格式:输出操作后队列的每个数字,数字间以空格分隔,最后一个数字后没有空格_本题重新定义队列出队的操作:队首出队的数字重新在队尾入队。 例:队列中有1 2 3三
文章浏览阅读1.1k次。**【matlab】 与cell相关的转换函数**1、cell2mat:将cell转换为mat的char型2、str2num:将mat从char转换为double型3、cellstr:将char转cell4、num2str:将double转char5、num2cell:将double直接转cell_cellmat
文章浏览阅读6.2k次。首先pyspider all启动pyspider的所有服务,然后访问http://localhost:5000创建一个爬虫任务:taonvlang,点开任务链接编辑http://localhost:5000/debug/taonvlang,默认模板:右侧为代码编辑区,可以在crawl_config里做一些配置,具体可以参考官网API文档:http://docs.pyspider.org/e_pyspider 卡住任务创建