项目应用场景:
局域网环境下且在无电子教室等网络管理软件下如何批量下发(更新)文件至多台主机
前提:1.多台主机在同一局域网且已经开放ssh端口配置了免密通信
2.主机所更新文件以及文件路径一致
3.网络带宽足够,千兆带宽
思路:可基于SSH免密通信做二次开发
测试用例:
服务器S(文件更新下发机)192.168.0.1,
已部署tomcat(也可用nginx jetty等服务器代替)做下发服务器
并在服务器内准备更新文件以及作业脚本保存在txt文件内
且资源存放路径在/TomcatPath/webapps下
以下发app1.zip为例
作业脚本参考:
#创建临时目录存放下发文件
if (!(Test-Path "D:\TempFolder")){ mkdir "D:\TempFolder"}
#申明解压文件(以7z为例)环境变量
$env:PATH += ";D:\Program Files\7-zip"
pushd d:\TempFolder
#curl拉取tomcat上更新资源
curl "http://192.168.0.1:8080/FileUpdate/app1.zip" -OutFile d:\TempFolder\app1.zip
Write-Host "'n'n"
if(Test-Path "D:\APP\app1"){
rm -r -force D:\APP\app1
}
#解压文件到固定路径
7z x app1.zip -oD:\APP\app1 -y
#完成作业后可删除文件
rm d:\Autoplan.ps1
用户机A 192.168.0.2
用户机B 192.168.0.3
总控机C 192.168.0.4
A B对下发机S配置SSH免密通信,并做taskschd.msc定时任务可参考前段文章
基于SSH免密通信+Schtasks实现远程控制应用-优快云博客
用户机A、B与服务器S做完免密通信
并在A、B创建分发脚本,保存为powshell脚本格式
curl -o D:\AutoPlan\Autoplan.ps1 'http://192.168.0.1:8080/FileUpdate/Autoplan.txt'
且在A、B上创建基础定时任务T1绑定该脚本
可再创建一个计划任务程序 关联空脚本 Autoplan.ps1 占位,等T1执行会覆盖当前脚本
在总控机C上创建脚本
两个脚本之间睡眠了五秒 以防执行过快出现异常
注:如果主机数量过多 可以将ip提取出来,然后优化一下distribution_Control脚本
for /f "delims=" %%i in ('type ip.ini') do (
echo,开启主机 %%i 上文件分发计划任务
>nul ssh Administrator@%%i 'schtasks /run /tn distributionFile'
)
Tips:此方案适用于特定环境下局域网文件批量自动下发,但需要带宽要求且主机资源路径高度一致