开发者社区> 问答> 正文

分享自己写的一个管理FTP的脚本

手里管着好几台服务器,经常添加修改FTP,特别麻烦(我不喜欢那些什么一键包或者面板什么的,用不上的东西太多,也占资源,我喜欢用什么装什么,用不上的一律不装)
服务器ubuntu 12.04 ,FTP 装的 vsftpd 管理FTP的时候,一般要先加入用户名和密码,然后写配置文件,然后建立目录,然后生成账号加密文件。。。
太繁琐了,实在受不了,花了一天时间,简单学了一下SHELL,编写了这个脚本,大牛不要笑,本人小菜,之前也没弄过SHELL,代码写得不好看,不过用起来应该还是可以的
先看下图:


本脚本程序只在ubuntu 12.04上测试过,其他linux发行版本可能需要修改一下代码才可以用,具体看程序里面的说明
执行程序:
bash 脚本文件名

以下是代码,请自行保存并上传到服务器
[    post]
#!/bin/bash

#
#  VSFTPD基本管理脚本
#  Author  戴举龙
#  Email  daijulong@qq.com
#  QQ  88622090
#  此脚本仅在ubuntu12.04下测试可用,其他linux发行版未测试,可用性未知
#  使用时执行shell为bash
#  此脚本默认服务器上已经安装并配置好VSFTPD,db5.1_util
#  前面几行配置需要根据实际情况修改后才可正常使用
#  hash_account 函数中的db5.1_load 也需要修改为实际安装的版本
#  虚拟用户的相关权限配置,请在文件中查找“生成账号配置文件“,更换为自己的配置
#


#以下配置内容
#需要根据实际情况进行修改后才可使用

#用户列表文件
ftpuser_file="/root/ftpuser"
#账号加密文件
ftpuser_hash_file="/etc/vsftpd/vsftpd_login.db"
#用户配置文件目录
ftpuser_conf_dir="/etc/vsftpd/user_conf/"
#chroot用户列表文件
ftpuser_chroot_list_file="/etc/vsftpd/vsftpd.chroot_list"

#生成加密文件
hash_account(){
  #测试在删除账号的情况下仅重新生成覆盖原文件时删除的账号依然能登录,虽然目录会改变
  #所以先删除加密文件,再重新生成
  rm -f $ftpuser_hash_file
  db5.1_load -T -t hash -f $ftpuser_file $ftpuser_hash_file
}

#####  以上的内容需要根据实际配置进行修改  #####

#检查用户名,存在返回1
check_username(){
  if [[ -f $ftpuser_file ]]; then #账号文件存在
    i=0
    while read line
    do
      let "i =1"
      if [[ $i%2 -eq 1 ]];then #奇数行,即用户名所在行
        if [[ $line = $1 ]];then
          return 1
        fi
      else
        continue
      fi
    done<$ftpuser_file
    return 0
  else #不存在文件则直接返回
    return 0
  fi
}

#取得用户名所在的行,如无用户名,则返回0
get_username_line_num(){
  if [[ -f  $ftpuser_file ]]; then #账号文件存在
    j=0
    while read line
    do
      let "j =1"
      if [[ $j%2 -eq 1 ]];then #奇数行,即用户名所在行
        if [[ $line = $1 ]];then
          return $j
        fi
      else
        continue
      fi
    done<$ftpuser_file
    return 0
  else #不存在文件则直接返回
    return 0
  fi
}

##########################################
####    开始程序   #####
##########################################
echo "请选择要进行的操作:"
select menu in "新建FTP用户" "重新生成加密文件" "修改用户密码" "删除用户" "重启VSFTPD服务" "停止VSFTPD服务" "启动VSFTPD服务" "退出";do
break;
done

##########################################
####    添加新用户   #####
##########################################
if [ $menu = "新建FTP用户" ];then
  #用户名
  echo "请输入用户名:"
  read username
  while [ 1 -eq 1 ];do
    check_username $username
    if [ $? = 1 ];then
      echo "用户名已存在,请重新指定用户名:"
      read username
      continue
    else
      break
    fi
  done
  #密码
  echo "请输入密码:"
  read passwd
  #FTP目录
  echo "请输入用户目录(绝对路径):"
  read path
  while [ 1 -eq 1 ];do
    if [ -d $path ];then
      break
    else
      echo "目录不存在,请选择以下操作:"
      select dir_opt in "创建目录" "重新指定用户目录";do
        break;
      done
      if [ $dir_opt = "创建目录" ];then
        mkdir $path
        break
      else
        echo "请输入用户目录(绝对路径):"
        read path
      fi
    fi
  done
  #写入账号信息
  echo $username>>$ftpuser_file
  echo $passwd >>$ftpuser_file
  #生成加密文件
  hash_account
  #生成账号配置文件
  echo "write_enable=YES">$ftpuser_conf_dir$username
  echo "anon_world_readable_only=NO">>$ftpuser_conf_dir$username
  echo "anon_upload_enable=YES">>$ftpuser_conf_dir$username
  echo "anon_mkdir_write_enable=YES">>$ftpuser_conf_dir$username
  echo "anon_other_write_enable=YES">>$ftpuser_conf_dir$username
  echo "local_root=$path">>$ftpuser_conf_dir$username
  #追加chroot
  echo $username>>$ftpuser_chroot_list_file
  echo "您已成功增加一个FTP用户!"

##########################################
####    修改用户密码   #####
##########################################
elif [ $menu = "修改用户密码" ];then
  echo "请输入要修改密码的用户名:"
  read username
  passwd_line=0
  while [ 1 -eq 1 ]; do
    get_username_line_num $username
    line=$? #用户名所在行
    if [ $line = 0 ]; then
      echo "用户名不存在,请选择下一步操作:"
      select nx_opt in "重新输入用户名" "退出程序";do
        break;
      done
      if [ $nx_opt = "退出程序" ];then
        echo "您已退出程序!"
        exit
      else
        echo "重新输入用户名"
        read username
      fi
    else
      let "passwd_line=$line 1"
      break
    fi
  done
#  echo "用户名所在行:" $line
#  echo "密码所在行:" $passwd_line
  echo "请输入新密码:"
  read new_passwd
  while [[ 1 -eq 1 ]]; do
    if [ "$new_passwd" = "" ];then
      echo "新密码不能为空,请重新输入新密码:"
      read new_passwd
    else
      break
    fi
  done
  sed -i $passwd_line"c\\$new_passwd" $ftpuser_file
  hash_account
  echo "修改密码成功!"

##########################################
####    删除用户   #####
##########################################
elif [ $menu = "删除用户" ];then
  echo "请输入要删除的用户名:"
  read username
  passwd_line=0
  while [ 1 -eq 1 ]; do
    get_username_line_num $username
    line=$? #用户名所在行
    if [ $line = 0 ]; then
      echo "用户名不存在,请选择下一步操作:"
      select nx_opt in "重新输入用户名" "退出程序";do
        break;
      done
      if [ $nx_opt = "退出程序" ];then
        echo "您已退出程序!"
        exit
      else
        echo "重新输入要删除的用户名:"
        read username
      fi
    else
      let "passwd_line=$line 1"
      break
    fi
  done
#  echo "用户名所在行:" $line
#  echo "密码所在行:" $passwd_line
  echo "确定要删除吗?"
  select del_opt in "确定要删除" "不删除了,退出程序";do
      break;
  done
  if [[ $del_opt = "确定要删除" ]]; then
    #删除用户名和密码的两行
    sed -i $line","$passwd_line"d" $ftpuser_file
    #删除用户名对应的配置文件
    rm -f $ftpuser_conf_dir$username
    #重新生成加密文件
    hash_account
    #删除用户名对应的chroot中的行
    sed -i "/^"$username"$/d" $ftpuser_chroot_list_file
    echo "删除用户成功!"
  else
    echo "您已退出程序!"
  fi
  
##########################################
####    重启VSFTPD服务   #####
##########################################
elif [ $menu = "重启VSFTPD服务" ];then
  service vsftpd restart

##########################################
####    停止VSFTPD服务   #####
##########################################
elif [ $menu = "停止VSFTPD服务" ];then
  service vsftpd stop

##########################################
####    停止VSFTPD服务   #####
##########################################
elif [ $menu = "启动VSFTPD服务" ];then
  service vsftpd start

##########################################
####    重新生成加密文件   #####
##########################################
elif [ $menu = "重新生成加密文件" ];then
  hash_account
  echo "生成账号加密文件成功"

##########################################
####    退出程序   #####
##########################################
else
  echo "您已退出程序!"
fi




展开
收起
daidaidai 2013-08-05 11:57:39 13349 0
8 条回答
写回答
取消 提交回答
  • Re分享自己写的一个管理FTP的脚本
    能贴下vsftpd。conf么

    -------------------------

    Re分享自己写的一个管理FTP的脚本
    报错啊。。
    syntax error near unexpected token `then'
    2013-08-06 19:52:12
    赞同 展开评论 打赏
  • 高端了,收藏了。
    2013-08-06 16:34:44
    赞同 展开评论 打赏
  • 您的帖子很精彩!希望很快能再分享您的下一帖!
    2013-08-06 11:31:24
    赞同 展开评论 打赏
  • 优秀技术帖子,谢谢楼主了
    2013-08-05 13:46:50
    赞同 展开评论 打赏
  • 用心服务
    不知道Centos 能用否?
    2013-08-05 13:03:22
    赞同 展开评论 打赏
  • 技术贴,必顶。
    2013-08-05 12:33:43
    赞同 展开评论 打赏
  • 回1楼大脸猫的帖子
    谢谢版主

    -------------------------

    回4楼chinaoc的帖子
    把前面的那些文件位置什么的,改一下,应该也可以用的

    -------------------------

    回9楼yipengmao的帖子
    这个跟VSFTPD.CONF关系不是太大,只要保持前面几行相关的路径跟VSFTPD.CONF中的一致就可以了

    -------------------------

    回11楼yipengmao的帖子
    检查下空格什么的,没发上附件,可能是粘贴复制代码的时候,有一点错乱造成语法错误
    2013-08-05 12:23:38
    赞同 展开评论 打赏
  • 优秀文章-欢迎进行技术分享,感谢你的支持!
    2013-08-05 11:59:08
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载