基於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 Files\OpenSSH 目錄下面,

執行下面的命令來安裝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_scripts\a.txt

來看看執行的效果,已經把遠程服務器上面的文件拉下來了。

下面來看看上傳文件。

# 連接上遠程服務器
open sftp://用戶名:密碼@10.10.8.9 -hostkey="*"

# 選擇遠程服務器的目錄
cd /D:/ftptest

# 上傳文件夾到遠程目錄
put D:\winscp_scripts\web_app_demo

# 斷開連接
close

# 退出
exit

整體的過程和獲取文件差不多,有區別的就是把get命令改成put

上面的示例是直接把整個文件夾傳到遠程服務器的遠程目錄。

上傳后的結果如下

當然有些時候,我們發布的文件,有一些是不想直接傳上去的,好比一些奇葩的配置文件

要滿足這個需求,我們就需要給put命令加個參數,過濾掉我們不需要傳輸的文件。

這里就要借助-filemask 這個參數來過濾了。它可以用|符號來分割包含的和排除的文件

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

put D:\winscp_scripts\web_app_demo -filemask=*|*.config

從這個例子打印的傳輸日志也可以發現,web.config這個文件並沒有上傳上去。

還有很多其實參數和使用方法,可以去官網查看,這里就點到為止。

總結

在WinSCP和OpenSSH的基礎上,就可以比較方便的完成文件傳輸,如果需要在Windows上面做CI/CD,也就可以借助這個組合來完成了。

WinSCP的命令用起來還算是比較簡單,不會有很大的難度,這里用的是它原始的命令工具,也可以用powershell來完成,有興趣的也可以試試。

相關鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM