这里写目录标题
- 前言
- 为什么需要动态每日生成一个密码?
- 编写脚本
- 定时任务
- java对应的代码
前言
社长最近接到一个需求,需要ftp每天动态生成一个密码
为什么需要动态每日生成一个密码?
在软硬件通讯过程中,就以共享单车为例,共享单车的硬件程序有变动后,难道需要我人工一个个的去烧录程序,那肯定太low,一般都是通过服务器跟硬件简历连接后,下发命令,命令里面会包含ftp的地址、账号、密码、上次的路径。硬件端会知道我们的密码,会有一个安全隐患,每日动态生成ftp密码的需求就应运而生。
实现思路(头脑风暴):
- 既然是每天生成一个密码,那肯定是跟日期有关,那就需要考虑一个根据日期动态生成密码得逻辑
- 编写脚本,根据上面生成的密码,修改ftp密码
- cron计划,设置某个 时间,去触发脚本
编写脚本
centos8部署vsftpd
- 前提:默认大家都是已搭建好ftp的环境,建议使用虚拟账号的方式搭建,这样才好动态修改ftp的密码。
输入vim ftp.sh
source /etc/profile
#!/bin/bash
####密码加密的前缀
FTP_NAME=ftp
####密码存放的目录
FTP_PATH=/etc/vsftpd
TXT_PATH=$FTP_PATH/vuser.list
DB_PATH=$FTP_PATH/vuser.db
num1=$(date "+%m%d")
let num=num1+num1
let num3=num/3
let num2=num%3
###根据固定的路径组装密码,每天生成一次
app_name=$FTP_NAME$num$num3$num2
#####删除最后一行密码,最后加入一行数据
sed -i '4d' $TXT_PATH
echo $app_name >> $TXT_PATH
echo $app_name
####重新生成密码
db_load -T -t hash -f $TXT_PATH $DB_PATH
- 生成密码的规则可自己定义
- sed -i ‘4d’ $TXT_PATH 4d的意思,就是删除第4行
- echo $app_name >> $TXT_PATH 就是最后一行新增一条数据
在/etc/vsftpd的vuser.list文件中填写对应的内容
- 单数是账号(test1111111,ftp123)、偶数是密码
- 注意:我定的规则是,第一个账号作为不变的密码,第二个账号,就是我需要每天动态生成的密码
定时任务
查看是否安装
crontab:rpm -qa | grep crontab
- 一般得系统都自带定时任务
输入crontab -e
####增加一个ftp密码定时每天修改的脚本
1 0 * * * /root/ftp.sh
- 表示每天的00:01分,会执行对应的脚步
####添加或者修改定时任务
crontab -e
####查看定时任务
crontab -l
####查看定时任务的日志记录,可能通过这里查看确定定时任务是否执行
tail -f /var/log/cron
java对应的代码
/**
* 根据username,进行密码的加密,每天的凌晨脚本去修改密码
* @param username
* @return
*/
public static String passwordFtp(String username){
Integer mmdd = Integer.parseInt(TimeUtil.dateToString(new Date(),"MMdd"));
Integer one = mmdd + mmdd;
Integer two = one / 3;
Integer three = one % 3;
return username+ one.toString() + two.toString() + three.toString() ;
}
- username就是密码前缀,默认为ftp