• createSftp.sh


    #!/usr/bin/env bash
    #######################################################################
    #
    # 用途:此脚本用于新建sftp服务和账户
    # 版本:v1.0
    # 作者:weiman3389@126.com
    # 最近修改:2019-08-26
    #
    #######################################################################
    Ip=$(ip a|grep global|awk '{print$2}'|awk -F "/" '{print$1}')

    #如果没有sftp组的话,建立sftp组
    [[ $(grep sftp /etc/group|wc -l) -ge 1 ]] || groupadd sftp

    #新建用户名
    echo -e " -------------$(date +%Y-%m-%d" "%H:%M:%S)---------------------------- "

    read -p "请输入新建sftp用户名:" FtpUser

    if [[ $(grep ${FtpUser} /etc/passwd|wc -l) -ge 1 ]];then
    echo -e "已存在 ${FtpUser} 账号,请知悉。"
    exit 1
    else
    #useradd -g sftp -s /bin/false ${FtpUser}
    useradd -g sftp ${FtpUser}
    fi

    #为用户生成随机密码并保存到文件
    PassWd=$(strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 12 | tr -d " ";echo)

    echo -e "${PassWd}"|passwd --stdin ${FtpUser} 2>&1 >/dev/null

    echo -e "${FtpUser} ${PassWd}" >> ~/.Secret.db

    #建立SFTP目录
    if [ ! -d /data/sftp ];then
    mkdir -p /data/sftp
    chown root:root /data/sftp && chmod 755 /data/sftp
    fi

    #建立SFTP用户登入后可写入的目录

    mkdir -p /data/sftp/${FtpUser} && chown root:sftp /data/sftp/${FtpUser}

    usermod -d /data/sftp/${FtpUser} ${FtpUser}

    mkdir -p /data/sftp/${FtpUser}/upload && chown -R ${FtpUser}:sftp /data/sftp/${FtpUser}/upload

    chmod 755 /data/sftp/${FtpUser}/upload

    #修改/etc/ssh/sshd_config文件
    if [[ $(grep "^#Subsystem" /etc/ssh/sshd_config|wc -l) -ge 1 ]];then
    echo
    else
    sed -i 's/^Subsystem/#Subsystem/g' /etc/ssh/sshd_config
    echo -e "
    Subsystem sftp internal-sftp -l INFO -f AUTH #这行指定使用sftp服务使用系统自带的internal-sftp
    Match Group sftp #这行用来匹配用户组
    ChrootDirectory /data/sftp/%u #用chroot将用户的根目录指定到/data/sftp ,这样用户就只能在/data/sftp下活动
    AllowTcpForwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
    X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
    ForceCommand internal-sftp -l INFO -f AUTH #指定sftp命令
    " >> /etc/ssh/sshd_config

    service sshd restart
    fi

    #关闭selinux
    if [ $(grep "^SELINUX=" /etc/sysconfig/selinux|awk -F "=" '{print$2}') != 'disabled' ];then
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
    setenforce 0
    fi

    #报告sftp部署结果

    echo -e "账户信息交付方式:"
    echo -e "
    33[1m33[31m 1,33[1m33[33m邮件推送到目标邮箱并示在终端上 33[0m
    33[1m33[31m 2,33[1m33[33m仅显示在终端上 33[0m
    "
    read -p "请选择:" Deliver

    if [ ${Deliver} == '1' ];then
    read -p "请输入需要接收信息的邮箱账号(如有多个账号请使用空格分开):" -a MailUser

    echo -e " 已建立 sftp 如下账户
    账户:33[1m33[31m ${FtpUser} 33[0m
    密码:33[1m33[31m ${PassWd} 33[0m
    数据:33[1m33[31m /data/sftp/${FtpUser}/upload 33[0m
    如果您忘记了账号密码,可查看 ~/.Secret.db 内容 "

    echo -e "服务器:${Ip} sftp账号:${FtpUser} sftp密码:${PassWd} 如密码有误或丢失,请联系管理员。" |mail -s "新建的sftp信息" "${MailUser[@]}"

    echo -e " 已将账户信息推送到以下邮箱: "

    for(( i=0;i<${#MailUser[@]};i++)) do echo -e "${MailUser[i]}"; done;

    echo -e""

    elif [ ${Deliver} == '2' ];then

    echo -e " 已建立 sftp 如下账户
    账户:33[1m33[31m ${FtpUser} 33[0m
    密码:33[1m33[31m ${PassWd} 33[0m
    数据:33[1m33[31m /data/sftp/${FtpUser}/upload 33[0m
    如果您忘记了账号密码,可查看 ~/.Secret.db 内容 "

    fi

  • 相关阅读:
    日报 18/05/29
    jsvascript === 和==的区别
    分享个数组
    ROC曲线绘制
    DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]
    利用JAX-WS 开发web服务
    菜鸟的成长之路——在清华特奖经验分享交流会上的演讲
    一段小代码的思考
    关于Vector中的元素中含有指针成员的情况
    关于职业规划——好帖【转载】
  • 原文地址:https://www.cnblogs.com/weiman3389/p/11413051.html
Copyright © 2020-2023  润新知