• 基于OpenSSH+WinSCP完成Windows服务器之间的文件传输


    背景

    经常会遇到在不同服务器之间传输文件,Linux和Linux之间用命令rsync, windows和linux之间普遍是有图形化界面的ftp软件,老黄平时用的比较多的是FileZilla

    Windows和Windows之间的话,90%都是在一台机器复制,到另一台机器去粘贴。这个在做CICD的时候就不太现实了,需要通过命令来自动完成,不能再通过手动复制粘贴的方式来完成。

    FileZilla,在Windows上面接用脚本操作的话,并不是很方便,也会有交互式的弹窗确认,于是就尝试了一下WinSCP。

    因为WinSCP的官网是很明确的指出,它是支持脚本操作的。

    下面老黄就简单介绍一下,如何在两台Windows机器之间搞定文件传输。

    OpenSSH

    OpenSSH是这篇文章的基石,因为我们不打算搭建一个ftp服务器,所以要用最直接的方案,在远程服务器安装OpenSSH。

    在Windows安装OpenSSH,PowerShell组织下的Win32-OpenSSH项目有提供编译好的windows版本。

    https://github.com/PowerShell/Win32-OpenSSH/releases

    老黄这里下载的是OpenSSH-Win64.zip

    解压后的文件要放到 C:Program FilesOpenSSH 目录下面,

    执行下面的命令来安装sshd服务

    powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
    

    安装完,会在windows服务看到两个新的服务,把他们启动即可。

    下面就是要安装WinSCP了。

    WinSCP

    WinSCP,直接从官网下载即可。

    https://winscp.net

    WinSCP也是可以通过界面操作的,不过这里不会涉及,是通过它提供的Scripting and Task Automation来完成文件传输。

    下面就来简单介绍一下怎么使用。

    先来个简单的,从远程服务器拉取一个文件试试。

    下面是用到的几个命令,也加上了注释,应该比较容易懂的。

    # 连接上远程服务器
    open sftp://用户名:密码@10.10.8.9 -hostkey="*"
    
    # 选择远程服务器的目录
    cd /D:/ftptest
    
    # 从远程服务器的目录下载文件 examplefile.txt 到本地电脑的目录 d:winscp_scripts
    get examplefile.txt d:winscp_scripts
    
    # 断开连接
    close
    
    # 退出
    exit
    

    注:

    1. 选择远程服务器目录时,要注意路径是否存在
    2. 在完成所有操作后,记得断开连接和退出

    cd进入WinSCP的安装目录,执行下面的命令,其中a.txt 就是我们上面写的脚本

    .WinSCP.com /ini=nul /script=D:winscp_scriptsa.txt
    

    来看看执行的效果,已经把远程服务器上面的文件拉下来了。

    下面来看看上传文件。

    # 连接上远程服务器
    open sftp://用户名:密码@10.10.8.9 -hostkey="*"
    
    # 选择远程服务器的目录
    cd /D:/ftptest
    
    # 上传文件夹到远程目录
    put D:winscp_scriptsweb_app_demo
    
    # 断开连接
    close
    
    # 退出
    exit
    

    整体的过程和获取文件差不多,有区别的就是把get命令改成put

    上面的示例是直接把整个文件夹传到远程服务器的远程目录。

    上传后的结果如下

    当然有些时候,我们发布的文件,有一些是不想直接传上去的,好比一些奇葩的配置文件

    要满足这个需求,我们就需要给put命令加个参数,过滤掉我们不需要传输的文件。

    这里就要借助-filemask 这个参数来过滤了。它可以用|符号来分割包含的和排除的文件

    下面的例子就是排除了.config文件

    put D:winscp_scriptsweb_app_demo -filemask=*|*.config
    

    从这个例子打印的传输日志也可以发现,web.config这个文件并没有上传上去。

    还有很多其实参数和使用方法,可以去官网查看,这里就点到为止。

    总结

    在WinSCP和OpenSSH的基础上,就可以比较方便的完成文件传输,如果需要在Windows上面做CI/CD,也就可以借助这个组合来完成了。

    WinSCP的命令用起来还算是比较简单,不会有很大的难度,这里用的是它原始的命令工具,也可以用powershell来完成,有兴趣的也可以试试。

    相关链接

  • 相关阅读:
    加分二叉树
    香甜的黄油 Sweet Butter
    09.22今日暂时停更题解
    能量项链
    转圈游戏
    字串变换
    关押罪犯
    选择客栈
    神经网络
    未整理算法的总结
  • 原文地址:https://www.cnblogs.com/yuchsheng/p/13917574.html
Copyright © 2020-2023  润新知