本文共 4142 字,大约阅读时间需要 13 分钟。
#! /bin/bashvsftpd_op(){ local cmd="" local operation=$1 local log_file="vsftpd.log"#根据不同发行版起不同的service。以ubuntu为例,这里可能是service vsftpd start case $distro in "ubuntu" | "debian" ) cmd="service vsftpd $operation" echo "$cmd" | tee ${log_file} $cmd | tee ${log_file} ;; * ) #其他发行版用systemctl 来启动service #cmd="${operation}_service vsftpd" cmd="systemctl ${operation} vsftpd.service" echo "$cmd" | tee ${log_file} #eval \$$cmd | tee ${log_file} ;; esac}vsftpd_execute(){ local operation=$1 #调用函数vsftpd_op 控制ftp的service vsftpd_op $operation #等于零的话,测试失败? if [ 0 -ne $? ]; then echo "vsftpd $operation failed" lava-test-case vsftpd-$operation --result fail else echo "vsftpd $operation pass" lava-test-case vsftpd-$operation --result pass fi}set -xcd ../../utils . ./sys_info.shcd -#distro=`cat /etc/redhat-release | cut -b 1-6`#根据不同的发行版安装不同的包case $distro in "ubuntu") apt-get install vsftpd -y apt-get install expect -y print_info $? install-package ;; "centos") yum install vsftpd -y yum install vsftpd.aarch64 -y yum install expect -y yum install ftp -y print_info $? install-package ;; "opensuse") zypper install -y ftp zypper install -y expect ;;esac# test case -- start, stop, restart#分别测试start/restart/stop 这三个操作的ftpvsftpd_execute startvsftpd_execute restartvsftpd_execute stop#process=$(vsftpd_op status | grep "running")#if [ "$process"x != ""x ]; then # vsftpd_op stop#fiFTP_PUT_LOG=ftp_put_test.logFTP_GET_LOG=ftp_get_test.logif [ "$distro"x = "centos"x ] ;then FTP_USERS=/etc/vsftpd/ftpusers VSFTPD_CONF=/etc/vsftpd/vsftpd.confelse FTP_USERS=/etc/ftpusers VSFTPD_CONF=/etc/vsftpd.conffiif [ ! -e ${FTP_USERS}.origin ];then cp ${FTP_USERS}{,.origin}else cp ${FTP_USERS}{.origin,}fiif [ ! -e ${VSFTPD_CONF}.origin ];then cp ${VSFTPD_CONF}{,.origin}else cp ${VSFTPD_CONF}{.origin,}fi# prepare for the put and get test and the ftp home is ~/mkdir tmp && cd tmpecho 'For ftp put testing' > $FTP_PUT_LOGecho 'For ftp get testing' > ~/$FTP_GET_LOG#替换配置文件中的变量sed -i 's/root/#root/g' $FTP_USERSsed -i 's/listen=NO/listen=YES/g' $VSFTPD_CONFsed -i 's/listen_ipv6=YES/#listen_ipv6=YES/g' $VSFTPD_CONFsed -i 's/#write_enable=YES/write_enable=YES/g' $VSFTPD_CONFsed -i 's/write_enable=NO/write_enable=YES/g' $VSFTPD_CONFsed -i 's/userlist_enable=YES/userlist_enable=NO/g' $VSFTPD_CONFif [ "$distro" == "ubuntu" ] ; then sed -i 's/pam_service_name=vsftpd/pam_service_name=ftp/g' $VSFTPD_CONFfi#配置完参数后重启tftp的服务vsftpd_op restart#睡眠5ssleep 5#测试ftp service的状态.vsftpd_op statussystemctl restart vsftpd.serviceservice restart vsftpd.service# for get and put testcd /root#SELinux安全访问策略限制会导致550 Failed to open file的错误所以这里打开setsebool -P allow_ftpd_full_access 1cd -EXPECT=$(which expect)#使用绝对路径执行expect$EXPECT << EOFset timeout 100spawn ftp localhostexpect "Name"send "\r"expect "Password"send "root\r"expect "ftp>"#passive表示被动,ftp的工作模式有主动和被动解决"227 Entering Passive MOde"send "passive\r"expect "ftp>"send "get ftp_get_test.log\r"expect { "Transfer complete" { send "put ftp_put_test.log\r" expect "Transfer complete" } "Failed to open file" { send "put ftp_put_test.log\r" expect "Transfer complete" } "Connection refused" { send "put ftp_put_test.log\r" expect "Transfer complete" }}send "quit\r"expect eofEOF#看是否可以查找到FTP_GET_LOG 文件if [ $(find . -maxdepth 1 -name "$FTP_GET_LOG")x != ""x ]; then lava-test-case vsftpd-download --result passelse lava-test-case vsftpd-download --result failficd -#cd到用户的根目录cd ~if [ $(find . -maxdepth 1 -name "ftp_put_test.log")x != ""x ]; then lava-test-case vsftpd-upload --result passelse lava-test-case vsftpd-upload --result failfi#删除tmp 目录#删除安装包rm -rf tmpcase $distro in "ubuntu") apt-get remove vsftpd expect -y print_info $? remove-package ;; "centos") yum remove vsftpd expect -y print_info $? remove-package ;;esac
转载地址:http://mznmi.baihongyu.com/