#!/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 "\n-------------$(date +%Y-%m-%d" "%H:%M:%S)----------------------------\n"
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 "\n";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 "\n\
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 "\
\033[1m\033[31m 1,\033[1m\033[33m邮件推送到目标邮箱并示在终端上 \033[0m
\033[1m\033[31m 2,\033[1m\033[33m仅显示在终端上 \033[0m
"
read -p "请选择:" Deliver
if [ ${Deliver} == '1' ];then
read -p "请输入需要接收信息的邮箱账号(如有多个账号请使用空格分开):" -a MailUser
echo -e "\n已建立 sftp 如下账户 \n
账户:\033[1m\033[31m ${FtpUser} \033[0m \n
密码:\033[1m\033[31m ${PassWd} \033[0m \n
数据:\033[1m\033[31m /data/sftp/${FtpUser}/upload \033[0m \n
如果您忘记了账号密码,可查看 ~/.Secret.db 内容 \n"
echo -e "服务器:${Ip} \nsftp账号:${FtpUser} \nsftp密码:${PassWd} \n\n如密码有误或丢失,请联系管理员。" |mail -s "新建的sftp信息" "${MailUser[@]}"
echo -e "\n已将账户信息推送到以下邮箱:\n"
for(( i=0;i<${#MailUser[@]};i++)) do echo -e "${MailUser[i]}"; done;
echo -e""
elif [ ${Deliver} == '2' ];then
echo -e "\n已建立 sftp 如下账户 \n
账户:\033[1m\033[31m ${FtpUser} \033[0m \n
密码:\033[1m\033[31m ${PassWd} \033[0m \n
数据:\033[1m\033[31m /data/sftp/${FtpUser}/upload \033[0m \n
如果您忘记了账号密码,可查看 ~/.Secret.db 内容 \n"
fi