在工作中接到了使用bat命令定时上传文件到Linux的需求,总是需要手动输入密码挺麻烦,搞了两个比较简单的免密上传的方法。一、使用OpenSSH。二、使用FTP
一、使用OpenSSH
bat内容在:脚本内容
-
如果是win10系统的话可以直接在 设置–>应用–>应用和功能–>管理可选项–>添加功能 搜索OpenSSH client,然后安装。没有的话可以自行下载:https://www.openssh.com/
-
打开命令行(cmd),执行
ssh-keygen
,全部回车,生成本机的公钥和私钥,命令执行玩之后会提示生成文件的存储路径,我的在C:\Users\yu_llin\.ssh\
路径下。 -
把Windows生成的id_rsa.pub文件改个名(id_rsa_temp.pub)然后复制到Linux系统上公钥私钥存储路径下 /.ssh/ 路径下(.ssh为隐藏文件,如果没有的话需要在Linux上安装ssh)
SSH 服务器的安装:sudo apt-get install openssh-server
SSH 客户端的安装:sudo apt-get install openssh-client
生成秘钥:ssh-keygen -t rsa
-
将复制过来的文件内容追加到authorized_keys里,如果改文件不存在,自行创建一个就行,路径在 /.ssh/ 下(追加命令:
cat id_rsa_temp.pub>>authorized_keys
) -
执行脚本
二、使用FTP传输
1.单个文件
@echo off
set localPath=D:\temp\demo.txt
set host=***.***.**.**
set prot=22
set username=root
set password=root
set remotePath=/temp/
echo open %host% %prot%>ftp.up
echo %username%>>ftp.up
echo %password%>>ftp.up
echo cd %remotePath%>ftp.up
echo binary>>ftp.up
echo put %localPath%>>ftp.up
echo bye>>ftp.up
ftp -s:ftp.up
pause
2.全量文件上传(以.txt文件为例,可根据需要自行修改)
@echo off
set localPath=D:\temp\
set host=***.***.**.**
set prot=22
set username=root
set password=root
set remotePath=/temp/
echo open %host% %prot%>ftp.up
echo %username%>>ftp.up
echo %password%>>ftp.up
echo cd %remotePath%>ftp.up
echo binary>>ftp.up
echo prompt off>>ftp.up
echo lcd %localPath%>>ftp.up
echo *.txt>>ftp.up
for /d %%i in (*) do (
echo cd %remotePath%>>ftp.up
echo mikdir %%i>>ftp.up
echo cd %remotePath%%%i>>ftp.up
echo lcd %localPath%%%i>>ftp.up
echo mput *.txt>>ftp.up
)
echo bye>>ftp.up
ftp -s:ftp.up
del ftp.up /q
pause
如需上传文件并打印日志跳转此链接:
使用bat脚本上传文件至Linux并打印日志