在Windows下使用Powershell脚本和OpenSSH实现滚动备份Linux文件

2023-2-19 杰克 运维

       最近公司的一个业务上线,针对运维备份相关的要求也被提出。因为备份主机是Windows server操作系统,而目标系统基本都是Linux系统。因此配置了powershell的一个ssh模块和脚本来配合操作
       我使用的模块是posh-ssh 使用命令 Install-Module Posh-SSH 直接安装即可,安装过程如果没有安装 NuGet 会提示需要安装NuGet 可以提前使用命令Install-PackageProvider -Name NuGet 安装好NuGet 我这里已经安装好了,使用命令 get-command -Module posh-ssh 可以查看有哪些命令函数,目前的版本是3.0.8
get-command.png
在安装完这个posh-ssh后,发现没有下载文件的函数或命令,通过 PowweShell ISE 编辑器查看各个命令函数作用,只有Set-SCPItem 和 Set-SFTPItem 这二个命令是用于传输文件的,但都是用于文件上传不是用于下载

Set-SCPItem.png

Set-SFTPItem.png

考虑到Windows server有openssh这个可选功能组件,运维备份思路改成为:powershell脚本登录到目标系统,然后在目标系统上使用Windows的openssh组件将备份的文件通过SSH协议复制到本地Windows系统里
openssh.png
出于安全考虑,Windows上的openssh服务只在进行备份操作时启动,于是在脚本里增加了二个循环判断用于启动和停止openssh服务。同时需要在目标linux系统安装sshpass用于免交互登录。脚本滚动保存最近一个月的数据,所以要通过get-date命令获取当天日期以便将数据存到对应日期文件夹里。另外脚本通过out-file命令将执行过程记录下来作为日志,get-content行用于消除日志文件里的大量空格。完整脚本代码如下:
shell-all.png

脚本写完后通过Windows计划任务定期在每天业务不忙的时候执行,比如凌晨0点到早上7点这个时间段。在Windows计划任务中,如果执行的程序是Powershell脚本,在 操作 选项里  程序或脚本 一栏要填写Powershell主程序的路径,这个路径是固定的:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe   在 添加参数(可选) 一栏填写去掉交互参数NonInteractive 和脚本的路径

task.png

除了备份脚本,运维人员每周检查备份文件的时候如果每个备份日期文件夹都点开查看就很繁琐。虽然通过tree命令可以查看文件目录结构,但看不到文件大小、创建日期等详细信息。于是我又写了一个用于检查备份复制目录文件夹的脚本。使用Get-ChildItem获取文件夹信息,用get-content过滤整理不需要的信息

check.png

最终产生的检查文档如下,通过检查文档可以清晰的看到各个备份目录里日期文件夹下备份文件的详细信息

check-out.png

标签: PowerShell 脚本 备份 计划任务 自动化运维 Winodows OpenSSH

发表评论:

Powered by emlog 京ICP备17037512-1 e-mail:jackhkyin@163.com QQ:393147796