zoukankan      html  css  js  c++  java
  • 转:Windows下用sftp自动下载文件

    远程服务器是Linux操作系统,没有ftp服务,可以ssh,数据库每天2:00会自动创建一个备份文件,本地计算机是windows操作系统,希望用sftp每天3:00下载远程服务器上的备份文件。本地系统是linux的,可以参考另一篇文章“linux下自动sftp下载文件”。

    Windows下的sftp工具采用putty工具包中的psftp.exe,下载地址:
    http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

    命令行下输入“psftp -h”可以查看psftp的用法。

    PuTTY Secure File Transfer (SFTP) client
    Release 0.59
    Usage: psftp [options] [user@]host
    Options:
    -V        print version information and exit
    -pgpfp    print PGP key fingerprints and exit
    -b file   use specified batchfile
    -bc       output batchfile commands
    -be       don't stop batchfile processing if errors
    -v        show verbose messages
    -load sessname Load settings from saved session
    -l user   connect with specified username
    -P port   connect to specified port
    -pw passw login with specified password
    -1 -2     force use of particular SSH protocol version
    -4 -6     force use of IPv4 or IPv6
    -C        enable compression
    -i key    private key file for authentication
    -noagent disable use of Pageant
    -agent    enable use of Pageant
    -batch    disable all interactive prompts

    可以看到,我们能够通过导入一个脚本文件sftp.txt来自动完成sftp下载文件。命令格式如下:

    psftp remotehost -l username -pw password < sftp.txt

    现在的问题是,远程服务器的备份文件采用的文件名是自动创建的,存放在/logs目录,文件名格式为“dumpyyyymmdd.log”,比如dump20070310.log,那么这个每天变化的文件名称如何能传送到脚本文件sftp.txt中呢?

    只好google了,终于找到一个可以将date/time用于批处理文件的程序realdate.com,下载地址:
    http://www.huweb.hu/maques/realdate.htm

    好了,现在开始写批处理脚本sftp.bat。

    @echo off

    # 写psftp需要的脚本文件sftp.txt
    for /f %%i in ('realdate.com /d') do (set remotelogname=%%i)
    echo cd /logs > sftp.txt
    echo get dump%remotelogname%.log >> sftp.txt
    echo bye >> sftp.txt

    # 写日志文件sftp.log
    echo --------------------------------------- >> sftp.log
    for /f %%i in ('realdate.com /f="CCYY-MM-DD"') do (set locallogdate=%%i)
    for /f %%i in ('realdate.com /f="hh:mm:ss"') do (set locallogtime=%%i)
    echo %locallogdate% %locallogtime% >> sftp.log
    psftp remotehost -l username -pw password < sftp.txt > sftp.log
    echo. >> sftp.log
    echo done. >> sftp.log

    将psftp.exe、realdate.com和sftp.bat放在同一文件夹中,为sftp.bat建立计划任务,半夜就可以安心睡觉了。

    ----sampe 1简单版本

    这里的实例的两个文件是:main.bat ; ftptmp.bat

    main.bat 的内容就很简单:

    [plain] view plain copy
     
    1. ftp -n -s:"ftptmp.bat"  

    ftptmp.bat的内容如下: ()

    [plain] view plain copy
     

                 open $ftphost  

                 user $username $password  

                cd $filepath  

                get $filename  

                bye  

                exit  

    命令中的变量需自行替换。

    ps:  注意文件的命名不要是系统自带文件名,如ftp.bat ,这样会导致bat 文件死循环

    参考http://blog.csdn.net/oscar999/article/details/45074679

    ####一个小BUGwindows里面的批处理命令不停地处理同一条命令

    参考https://www.cnblogs.com/flypiggy/p/5098529.html

    最近在设置路由表的时候,为了方便,做了一个批处理

    route.bat 

    route delete 0.0.0.0
    route delete 10.25.0.0
    route ADD 10.25.0.0 MASK 255.255.0.0 10.25.15.250 METRIC 1
    route ADD 0.0.0.0 MASK 0.0.0.0 192.168.3.43 METRIC 1
     

     结果运行之后,只会不停地执行route delete 0.0.0.0.

    百度了一下,发现是批处理文件的名称跟windows系统保留名重复,遂改之,然后就好了

    再笨,也要飞得更高!!--Flypiggy
     

    #########2

            ftp/sftp自动上传、下载脚本                         

                标签:               path脚本userserver                     

        
          

                 分类:        
                 

             

    ftp脚本:

    1. #! /bin/sh  
    2.   
    3. server=172.23.3.150  
    4. remotedir=/users/tmp/  
    5. filename=test.txt  
    6.   
    7. ftp -in << EOM  
    8.   open $server  
    9.   user username password  
    10.   bin  
    11.   cd $remotedir    
    12.   put $filename  
    13.   bye  
    14. EOM   
    #! /bin/sh
    
    server=172.23.3.150
    remotedir=/users/tmp/
    filename=test.txt
    
    ftp -in << EOM
      open $server
      user username password
      bin
      cd $remotedir  
      put $filename
      bye
    EOM 

    sftp脚本:

    1. #!/bin/sh  
    2.   
    3. HOST=172.23.3.150  
    4. USER=root  
    5. PASSWORD=1234rewq  
    6. FILENAME=test.txt  
    7. LOCAL_PATH=/home/ligt/WindRiver/  
    8. REMOTE_PATH=/users/tmp/  
    9.   
    10. lftp -u $USER,$PASSWORD sftp://$HOST << EOM  
    11.   lcd $LOCAL_PATH  
    12.   cd $REMOTE_PATH  
    13.   put $TARGET  
    14.   bye  
    15. EOM  
    16.   
    17. echo "Success!"  
    #!/bin/sh
    
    HOST=172.23.3.150
    USER=root
    PASSWORD=1234rewq
    FILENAME=test.txt
    LOCAL_PATH=/home/ligt/WindRiver/
    REMOTE_PATH=/users/tmp/
    
    lftp -u $USER,$PASSWORD sftp://$HOST << EOM
      lcd $LOCAL_PATH
      cd $REMOTE_PATH
      put $TARGET
      bye
    EOM
    
    echo "Success!"

     

  • 相关阅读:
    idp 苹果开发账号续费
    rtx修改方法
    备份恢复IIS的设置
    CLR/C# 的一些语言特性
    LNMP(linux+nginx+mysql+php)服务器环境配置
    PostgreSQL Hot Standby
    Fail2ban
    Linux下安装Tomcat
    Linux下安装Jboss
    RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/5952274.html
Copyright © 2011-2022 走看看