windows_bat自动压缩并上传ftp

自作多情 提交于 2020-08-11 15:00:33

        近日有一个需求,公司有部分windwos机器,而客户需要查看应用生成的日记,一台台查找比较繁琐,所有就需要写一个脚本,每隔十分钟自动压缩日记目录并上传至部署在linux的ftp服务器上。

      首先需要再linux上搭建ftp服务器,我们用vsftp服务;

     我用的是定制化的vsftp文件,下载地址:vsftp下载

     需要先把机器原有的vsftp卸载了:

[root@zabbix ~]# rpm -qa|grep vsftpd^C
[root@zabbix ~]# yum erase vsftpd

 然后下载这个vsftp软件:

把vsftpd的配置文件和启动脚本都修改内容:

[root@zabbix vsftpd]# mv vsftpd.conf  /etc/vsftpd/vsftpd.conf
[root@zabbix vsftpd]# mv vsftp /etc/init.d/vsftpd 

需要设置的ftp的模式及用户名密码 ip等信息都在这个文件夹下面:     这里使用的   pasv 被动模式

ftp连接时会出现问题,大多问题都出现在ftp的模式上,需要重点了解下两种模式区别及使用场景。如下:

pasv   被动模式,客户端向服务器的端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路,当需要传送数据时,服务端会在命令链路上用pasv命令告诉客户端,我打开了XXX端口,你过来连我,于是客户端向服务端XXX端口发起连接请求,建立一条数据链路传送数据。

port   主动模式,客户端向服务器的端口(默认是21)发送连接请求,服务器接收连接,建立一条命令链路,当需要传送数据时,客户端在命令链路上用post命令告诉服务器端,我打开了XXX端口,你过来连我,于是服务端从20端口向客户端XXX端口发起连接请求,建立一条数据链路传送数据。

由此看来,两种模式的命令链路建立是一样的,而数据链路的建立则不一样。

请注意:选择用PASV方式还是PORT方式登录FTP服务器,选择权在FTP客户端。

客户端有两个要求,要求如下:

1、客户端只有公网ip,没有内网ip,  从上面的介绍可知,如果用POST方式,由于客户端没有公网IP,FTP无法连接客户端建立数据链路,这种请求下客户端必须要是用pasv模式,才能连接FTP服务器,大多数人连接不上都是此原因.就是因为客户端没有公网ip导致的。

2、客户端有公网IP,但是安装了防火墙。如果用pasv方式登录FTP服务器,因为建立数据链路的时候,是客户端向服务器端发送连接请求,没有问题,反过来,如果用POST方式登录FTP服务器,因为建立数据链路的时候,是由服务器端向客户端发送连接请求,此时连接请求会被防火墙拦截,如果要用POST方式连接FTP服务器,请打开1024以上的端口。

[root@zabbix vsftpd]# cat /etc/vsftpd/vsftpd.conf|grep -v '^#'
anonymous_enable=YES
local_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=NO
pasv_enable=YES
pasv_address=1.1.1.1
pasv_addr_resolve=YES
pasv_min_port=50001
pasv_max_port=55700
pasv_promiscuous=YES
xferlog_std_format=YES

注释:在上图/etc/vsftpd/vsftd.conf文件里,需要修改IP地址,自定义端口号  用户名  密码等信息。

修改完成后重启vsftpd服务。

然后在本地用FileZilla软件来测试是否能正常连接。

可以的话就可以写bat脚本:

脚本分为两部分:

压缩脚本:由于我用的7z压缩软件,方便在linux上解压查看。主要使用在windows上压缩的。

cd "D:\Program Files\ftplog"
d:
set "name=%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%"
"C:\Program Files\7-Zip\7z.exe" a -tzip %name%.7z logs

注释cd 需要进入到这个目录下,但是还是需要加 d: 才能进入到一个目录。用set设置一个时间的变量。
然后用7z的程序来压缩D:\Program Files\ftplog\logs这个目录:

ftp传输脚本

del /q  "D:\Program Files\ftplog\*.7z" > run.log
call 7z.bat >> run.log
echo open 172.17.9.3 1234 >ftp.txt
echo root>>ftp.txt
echo 123456>ftp.txt
echo cd /shiban01/172.17.8.17_logs  >>ftp.txt
echo binary >>ftp.txt
echo lcd ”D:\Program Files\ftplog“ >>ftp.txt
echo prompt *.7z >>ftp.txt
echo mput *.7z >>ftp.txt
echo bye >>ftp.txt
FTP  -s:ftp.txt
del ftp.txt 

注释:首先需要删除windwos目录下上次残留的压缩文件,然后用call调用同级目录下7z.bat文件。

然后用ftp的命令的命令写入到ftp.txt,然后用调用这个文件,连接ftp,

binary                     切换到本地目录,   

lcd    路径               进入到本地某个目录  

prompt                   用来关闭交互,要不然每次都要输入y.

linux 上需要设置删除三天前的日记内容:

[root@zabbix profile.d]# cat /etc/profile.d/ftp.sh 
#!/bin/bash
find /var/ftp/sh/ -type f +mtime +3 -name "*.7z"  -exec rm -rf {} \;
[root@zabbix profile.d]# crontab -l
0 1 * * * sh /etc/profile.d/ftp.sh

附记:碰到问题:

由于windwos只支持POST方式,如果客户端是内网ip,服务端在公网,则访问还有问题。

最好是服务器和客户端都在公网,或者服务端和客户端都在内网,这样才不会有问题。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!