背景介绍:IP公司使用堡垒机.8 ,个人使用.220位于不同的网段,不可以ping通,无法使用文件文件共享。基本上最友好的共享文件夹不可以用了。
需求动机:做开发必须登陆堡垒机,通过堡垒机连接数据库,写sql脚本。之前习惯写些辅助的脚本放在本地,便于随时执行和修改,也不会丢失。现在不得已,在公共堡垒机保存脚本,一来很多人脚本都有只好文件夹区分,二来无人管理容易被删除,三无法备份,当然也可以手动复制到本地,但效率很低并且浪费精力。
转折:原本这样无法使用共享,也无法ping通基本上,普通办法就行不通了。本地电脑装ftp内置服务,居然在堡垒机可以看到服务。不过,到了上传文件时候出现超时:150 Opening BINARY mode data connection.
搜索很久,大多是要修改ftp客户端连接模式,从主动修改为被动,可惜windos自带客户端只支持主动模式。
最后到防火墙添加ftp.exe作为规则例外,就可以顺利的mput了。注意:服务器设置在自己电脑220,客户端设置在远程.8堡垒机,和一般的从服务器下载文件刚好相反。
手动测试无误后,添加计划任务,明天观察下。
20191015补充:ftp.txt文件夹路径不要用反斜杠结尾,否则根目录文件无法读取!
代码如下:
t220.bat
ftp -s:ftp.txt
ftp.txt
open 10.11.110.220 3721
anonymous
anonymous
prompt off
bin
lcd E:\公共文件夹\2019年上半年文件\小程序和商城备份
cd 小程序和商城备份
mput *
lcd E:\公共文件夹\2019年上半年文件\商城75新库
cd ../商城75新库
mput *
lcd E:\公共文件夹\2019年上半年文件\ZH自主收银备份
cd ../ZH自主收银备份
mput *
lcd E:\公共文件夹\2019年上半年文件\伯钧会员
cd ../伯钧会员
mput *
bye
t220-schtasks.txt
schtasks /create /ru "System" /tn "SQL_ftpback Script" /tr C:\Windows\t220.bat /sc daily /mo 1 /st 19:01:00 /sd 2019/07/01 /ed 2019/12/31
第二天发现任务执行了,但文件没有拷贝过来。任务可以运行,不过返回运行结果0xFFFFFFFF
有说运行任务的起始路径错误的,无效:
又说本地安全策略不对的,无效:https://zhidao.baidu.com/question/1497852320393451379.html
后台添加了日志,发现脚本已经运行了,但ftp命令失败。
这是最终版的脚本,注意ftp.exe后面的参数加了双引号,这样就成功了。虽然win对大小写和格式不敏感,但命令行是敏感的!
cd /d "%~dp0"
echo "1 cd %~dp0 OK!">ftplog_220.txt
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
echo "2 get privge OK!" >>ftplog_220.txt
set PATH=%PATH%
C:\Windows\System32\ftp.exe "-s:C:\Windows\ftp.txt" >>ftplog_220.txt
echo "3 get ftp OK!">>ftplog_220.txt
:: pause