侧边栏壁纸
博主头像
Mr·Ldd Blog 博主等级

今天也是充满希望的一天!✍️

  • 累计撰写 48 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Windows定时运行shell脚本从Linux服务器下载文件到本地

Mr·ldd
2023-05-17 / 0 评论 / 0 点赞 / 53 阅读 / 0 字

Windows想使用SCP 命令定时连接linux服务器,下载文件或文件夹到本地;

但每次连接服务器都要输入密码,从而导致shell脚本运行时,无法直接运行,所以进行免密登录配置之后就可以跳过输入密码的步骤,直接运行shell脚本连接服务器下载

前提

一般Windows是无法直接运行shell脚本的,所以我们也需要提前安装一个跟linux服务器对应OpenSSL版本的Git工具

在linux服务器输入命令查看OpenSSL版本ssh -V

Linux:

Git:

原理

ssh提供了安全的身份认证的策略,在免密登录之前,首先需要一对公钥和私钥。

客户端拿着私钥,服务端拿着公钥,属于非对称加密。

私钥客户端自己拿着不在网络上传输,公钥可以网络传输存在服务器上,登录的时候用户拿私钥进行加密,内容发送给服务器,服务器对公钥进行解密,成功解密就告诉客户端建立链接。

实现步骤

一、生成公钥和私钥

  • Windows 打开 cmd

  • 输入:ssh-keygen

  • 连续回车或者根据提示确定生成的私钥公钥存放的路径。默认(就是一路回车)会在用户/.ssh目录下生成公钥和私钥。

id_rsa:私钥
id_rsa.pub:公钥

重要提示!!!
C:\Users\Administrator\.ssh\id_rsa
用户名的路径上一定不能有中文,如果有就无法实现免密登录。如果你的用户名是中文,要么需要修改成英文,要么就将秘钥放置到别的文件路径中。

二、复制Windows公钥到Linux

  • 使用ssh连接上linux服务器,进入/root/.ssh 目录查看是否有authorized_keys 文件(没有则创建:vim authorized_keys

  • 将客户端的公钥(也就是刚刚Windows上自己生成的id_rsa.pub)内容添加到 authorized_keys文件

  • authorized_keys 文件权限为:600 代码:chmod 600 /root/.ssh/authorized_keys

  • .ssh目录权限为:700 代码:chmod 700 /root/.ssh

三、编辑shell脚本

#!/bin/bash
#变量
scplinux=/root/soft-run/my_backup_db
#scp命令,scp -r 用户名@ip地址:文件路径 本机路径 >> E:/EEE/scp.log 2>&1
scp -r root@nxlbc.top:${scplinux} E:/EEE >> E:/EEE/scp.log 2>&1
#判断上一条命令是否执行成功
if [ $? -eq 0 ]
then
    echo "下载mybackup执行成功" >> E:/EEE/scp.log 2>&1
else
    echo "下载mybackup执行失败" >> E:/EEE/scp.log 2>&1
fi
#变量
scpbackup=E:/EEE/my_backup_db
#删除目标文件夹内一天前"*.sql.zip"文件
find ${scpbackup} -atime +1 -name "*.sql.zip" -exec rm -rf {} \;

四、Windows创建定时运行任务

打开控制面板→管理工具→任务计划程序:

五、副本

find /tmp -mtime +30 -type f -name "*.zip" -exec rm -rf {} \;
/tmp --设置查找的目录;
-mtime +30 --设置修改时间为30天前;
-type f --设置查找的类型为文件;其中f为文件,d则为文件夹
-name "*" --设置文件名称,可以使用通配符;
-exec rm -rf --查找完毕后执行删除操作;
 {} \; --固定写法

SHELL中find -mtime -atime -ctime
先看下三者的区别:
-atime:最后一次读的时间戳;
-mtime:最后一次修改内容的时间戳;
-ctime:最后一次修改文件属性的时间戳,比如文件的owner和group;当然修改内容也会修改ctime

-mtime后面跟一个整数,表示几天前修改过。也有三种:
-mtime n
-mtime -n
-mtime +n

 -mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件
 -mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
 -mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名
0

评论区