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天本身)被更改过内容的文件名
评论区