代码拉取完成,页面将自动刷新
#!/usr/bin/env bash
#set -e
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# [ 功能简述 ]:新建sftp服务和账户
# [ 适用平台 ]:适用于 RedHatEL7.X Centos7.X
# [ 当前版本 ]:1.01
# [ 最近修改 ]:2022-11-05
# [ 最近作者 ]:mugoLH
# [ 联系邮箱 ]:hxsaj@126.com
# [ 所属公司 ]:
# [ 脚本引用 ]:
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# [ 脚本引用 ] Import the script
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# [ 变量列表 ] List of common variables
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# SFTP路径
Sftp_Dir=/data/sftp
# 需要同步的目录
Mirr_Dir=download
# 获取本机IP
Ip=$(hostname -I | awk '{print$1}')
# [ 函数列表 ] Function list
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
info_p(){ printf "\e[1;32;40m%-10s %-1s\n\e[0m" "${1}" "${2}" >&1 ;}
tips_p(){ printf "\e[1;36;40m%-10s %-1s\n\e[0m" "${1}" "${2}" >&1 ;}
error_p(){ printf "\e[1;35;40m%-10s %-1s\n\e[0m" "${1}" "${2}" >&1 ;}
# 显示新建sftp账号信息
function Echo_Info(){
tips_p "[ 时间 ]:" "$(date +%c)"
info_p "[ 账户 ]:" "${FtpUser}"
info_p "[ 密码 ]:" "${PassWd}"
info_p "[ 数据 ]:" "${Sftp_Dir}/${FtpUser}/${Mirr_Dir}"
info_p "[ 备查 ]:" "如果您忘记了账号密码,可查看 ~/.Secret.db 内容"
}
# 邮件发送账号信息
function Send_Mail_info(){
Email_print(){
info_p "[ SFTP主机 ]:" "${Ip}"
info_p "[ SFTP账号 ]:" "${FtpUser}"
info_p "[ SFTP密码 ]:" "${PassWd}"
info_p "如密码有误或丢失,请联系管理员"
}
if [[ $(whereis mail | wc -l) -ge 1 ]];then
echo -e "
[ SFTP主机 ]: ${Ip}
[ SFTP账号 ]: ${FtpUser}
[ SFTP密码 ]: ${PassWd}
如密码有误或丢失,请联系管理员
" |mail -s "SFTP信息" "${MailUser[@]}"
else
error_p "[ ERROR ]:" "系统未配置Mail发送客户端"
exit 1
fi
}
# 关闭selinux
function selinux_off() {
if [ $(grep "^SELINUX=" /etc/sysconfig/selinux|awk -F "=" '{print$2}') != 'disabled' ];then
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
fi
}
# 新建用户
function create_sftp_user(){
read -p "[ INPUT ] 输入新建sftp用户名 :" FtpUser
if [[ -z ${FtpUser} ]];then
create_sftp_user
elif [[ $(grep ${FtpUser} /etc/passwd|wc -l) -ge 1 ]]; then
error_p "[ ERROR ]" "已存在 ${FtpUser} 账号 ,请重新输入"
create_sftp_user
else
# 如果没有sftp组的话,建立sftp组
[[ $(grep sftp /etc/group|wc -l) -ge 1 ]] || groupadd sftp
# 创建用户
useradd -g sftp -s /bin/false ${FtpUser}
# 生成随机密码并保存到文件
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 ${Sftp_Dir} ];then
# 建立SFTP用户根目录
mkdir -p ${Sftp_Dir} && chown -R root:root ${Sftp_Dir} && chmod 755 ${Sftp_Dir}
# 建立SFTP用户登入后可写入的目标目录
mkdir -p ${Sftp_Dir}/${FtpUser} && chown root:sftp ${Sftp_Dir}/${FtpUser}
usermod -d ${Sftp_Dir}/${FtpUser} ${FtpUser}
mkdir -p ${Sftp_Dir}/${FtpUser}/${Mirr_Dir} && chown -R ${FtpUser}:sftp ${Sftp_Dir}/${FtpUser}/${Mirr_Dir}
chmod 755 ${Sftp_Dir}/${FtpUser}/${Mirr_Dir}
fi
# 修改/etc/ssh/sshd_config文件
if [[ ! $(grep "^#Subsystem" /etc/ssh/sshd_config|wc -l) -ge 1 ]];then
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 ${Sftp_Dir}/%u #用chroot将用户的根目录指定到/data/sftp ,这样用户就只能在/data/sftp下活动
AllowTcpForwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
ForceCommand internal-sftp -l INFO -f AUTH #指定sftp命令
" >> /etc/ssh/sshd_config
# 重启sshd
systemctl restart sshd.service
fi
# 关闭selinux
selinux_off
# 报告sftp部署结果
echo -e "\n账户信息交付方式:"
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_Info &&Send_Mail_info
echo -e "\n已将账户信息推送到以下邮箱:\n"
for(( i=0;i<${#MailUser[@]};i++)) do echo -e "${MailUser[i]}"; done;
echo -e""
elif [ ${Deliver} == '2' ];then
Echo_Info
fi
fi
}
create_sftp_user
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。