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

原文地址:https://www.cnblogs.com/weiman3389/p/11413051.html