使用 WinSCP 自动上传和下载 SFTP 文件

WinSCP图像。

出版日期:

更新:


技术文章 > 使用 WinSCP 自动上传和下载 SFTP 文件

2026 状态和安全使用

结论:WinSCP.com 与脚本文件一起使用,固定服务器的 SSH 主机密钥指纹,对源和进程参数保密,启用日志记录,并在 WinSCP 返回非零退出代码时使作业失败。

你将学到什么

  • 脚本化的opengetput操作如何适应批处理工作流程。
  • 主机密钥验证如何防止无人值守作业信任错误的服务器。
  • 如何通过日志、显式路径和错误处理使传输可重复。

适用人群:Windows 管理员自动将文件传输到已知的 SFTP 端点。

截至 2026 年的适用情况:下面的原始脚本包含说明性纯文本凭据并以交互方式接受主机。仅将其作为历史学习材料;不要部署这些机密或绕过主机密钥检查。首选 SSH 密钥或经批准的秘密存储并测试恢复行为。

安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。

官方主要来源

概述。

使用WinSCP命令创建一个自动文件下载和上传工具。 使用命令提示符执行WinSCP提供的命令。 毫不奇怪,WinSCP提供了命令。 你通常使用 "WinSCP.exe",但 "WinSCP.com "也可以使用。 你几乎不会在快捷方式目的地中看到 "C:\Program Files (x86)\WinSCP "文件夹,因为你通常基本上是从快捷方式中打开它,但如果你看一下快捷方式目的地,"WinSCP.com "也应该存放在那里。 这是该工具的创建地。

目录

  1. 什么是WinSCP命令?
  2. 自动下载工具
  3. 自动上传工具
  4. 其他可能经常使用的命令
  5. 摘要

1. 什么是 WinSCP 命令行?

WinSCP 的命令行界面可以通过脚本执行 GUI 中常见的文件传输操作。 它适合可重复的上传、下载和会话管理任务。

1-1. 你可以做什么。

你可以下载和上传文件,创建文件夹,调用shell命令和许多其他东西。

可能经常使用的命令包括。

open:用于连接。

get:用于下载文件。

put:用于上传文件。

exit:退出 WinSCP。

1-2. 你不能做什么。

基本上传和下载可以直接完成;更复杂的筛选条件可能需要组合 WinSCP 的文件掩码、脚本能力或远程 shell 命令。

例如,按更新时间筛选文件时,应先确认所用 WinSCP 版本支持的文件掩码语法。

call 命令可以在支持的远程会话中执行 shell 命令,但可用命令、转义规则和权限取决于服务器环境。

2. 自动下载工具

我们希望创建一个工具,能够真正自动下载放置在Linux服务器上的日志。

2-1. 使得

创建一个具有以下条件的工具。

、Windows 10作为执行环境。

、要收购的服务器是Linux。

、IP地址为192.168.50.10。

首先,创建一个bat文件作为激活的起点。

file_get.bat


@setlocal enabledelayedexpansion
@set time2=%time: =0%
@set MKDIR_NAME=%date:~0,4%%date:~5,2%%date:~8,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%
@set FOLDER=%~dp0%MKDIR_NAME%
@mkdir %FOLDER%
@"C:\Program Files (x86)\WinSCP\WinSCP.com" /console /script=%~dp0ftp.txt /parameter %FOLDER% 

除了最后一行,其余的过程都是Windows命令。 内容。

@setlocal enabledelayedexpansion

延迟的环境变量的设置。 简而言之,这种描述可以防止为一个变量设置一个可能不会被反映的值。

@set time2=%time: =0%
@set MKDIR_NAME=%date:~0,4%%date:~5,2%%date:~8,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%
@set FOLDER=%~dp0%MKDIR_NAME%

从当前时间获取yyymmddhmmss,最后将其放入FOLDER变量的过程。

@mkdir %FOLDER%

在执行批处理的文件夹下直接创建一个文件夹'yyyymmddhmmss'。

@"C:\Program Files (x86)\WinSCP\WinSCP.com" /console /script=%~dp0ftp.txt /parameter %FOLDER% 

WinSCP.com(WinSCP命令)。 执行时,在批处理文件存放的同一文件夹中执行 "ftp.txt "中列出的命令。 传递你刚刚创建的文件夹路径作为参数。

这样就完成了调用者文件的创建。 然后在 "ftp.txt "中描述了WinSCP命令。

ftp.txt


option batch on
option transfer binary
open test:testpassword@192.168.50.10
get /var/log/httpd/access_log %1%\
close
exit

内容。

option batch on

对于需要查询的流程,系统会自动假定选择了 "否",并自动执行该流程。 如果你包括这个,它将自动覆盖任何重复的文件名。 (你可以创建一个文件夹 "yyyymmddhmmss",把文件放在那里,这样就不会出现重复的文件名了。)

option transfer binary

该设置是以二进制模式传输数据。

open test:testpassword@192.168.50.10

'username:pass-word@IP address'. 连接到IP地址 "192.168.50.10"。

get /var/log/httpd/access_log %1%\

将'/var/log/httpd/access_log'存储在'yyyymmddhhmmss'文件夹中。('%1%'是file_get.bat中传递的参数。)

这里的 “*” 是 WinSCP 支持的通配符,不是正则表达式。例如 “/var/log/httpd/*” 会匹配该目录中的文件。

close
exit

close 关闭当前会话,exit 退出 WinSCP。

这样就完成了该工具的创建。

2-2. 首次连接前的主机密钥验证

自动执行前,应通过可信渠道核对服务器的 SSH 主机密钥指纹。

WinSCP 首次连接时会显示主机密钥指纹。只有与服务器管理员提供的指纹一致时才能接受;仅点击“是”并不能证明连接安全。自动化脚本更适合显式指定预期指纹,以便密钥变化时立即失败。

"C:\Program Files (x86)\WinSCP\WinSCP.com"
open test:testpassword@192.168.50.10 ⇒系统提示你作出反应,输入 "Y"。
close
exit
exit

示例中的账号、密码和地址均为占位值。生产脚本不应把密码直接写入命令行;应使用受保护的会话配置或密钥认证。

确认指纹并安全保存连接设置后,再执行批处理文件。

2-3. 实施

最后,现在是实施的时候了。 双击 "file_get.bat"。

如果创建了 "yyyymmddhhmmss "文件夹并将日志保存在该文件夹中,则成功。

3. 自动上传工具

下一步是创建一个工具,把文件放在Linux服务器上。 基本结构将与下载工具相同。

3-1. 使得

创建一个具有以下条件的工具。

、Windows 10作为执行环境。

、目标服务器是Linux。

、IP地址为192.168.50.10。

首先,创建一个bat文件作为激活的起点。

file_put.bat


@setlocal enabledelayedexpansion
@set FOLDER_NAME="put_files\*"
@set FOLDER=%~dp0%FOLDER_NAME%
@set PUT_FOLDER="/tmp/"
@"C:\Program Files (x86)\WinSCP\WinSCP.com" /console /script=%~dp0put_ftp.txt /parameter %FOLDER% %PUT_FOLDER%

由于在自动下载工具中已经解释过了,所以省略了一点解释,但过程是将文件存储在'put_files'文件夹中,在'/tmp/'执行批处理文件的同一文件夹中。 实际的存储过程在 "put_ftp.txt "中描述。

put_ftp.txt


option batch on
option transfer binary
open test:testpassword@192.168.50.10
put %1% %2%
close
exit

"put %1%\ %2%"命令根据作为参数传递的 "源文件 "和 "目标文件夹 "上传文件,尽管省略了一点解释,因为这在自动下载工具中也有解释。

3-2. 实施准备

与自动下载工具一样,指纹在执行前会被提前检查。(如果自动下载工具已经运行过一次,则不需要。)

在命令提示符下执行以下命令。

"C:\Program Files (x86)\WinSCP\WinSCP.com"
open test:testpassword@192.168.50.10 ⇒系统提示你作出反应,输入 "Y"。
close
exit
exit

'test:testpassword@192.168.50.10'应替换为'username:password@IP address'。

这样就完成了初步准备工作。

3-3. 实施

最后,现在是实施的时候了。 双击 "file_put.bat"。

如果存储在'put_files'中的文件被转移到'/tmp/'文件夹,则成功。

4. 其他可能经常使用的命令

我们已经介绍了基本的下载和上传,但还想介绍其他可能经常使用的命令。

4-1. 密钥认证

早些时候,你根据以下描述用密码认证登录。

open test:testpassword@192.168.50.10

'open username:password@IP address'. 对于密钥认证,适用于以下情况。

open test@192.168.50.10 -privatekey=id_rsa.ppk

'-privatekey=id_rsa.ppk'是钥匙的路径。 由于它被列为相对路径,因此假定密钥(id_rsa.ppk)也在可执行文件(bat文件)所在的文件夹中。 例如,如果钥匙直接位于C盘下,写"-privatekey=C:\id_rsa.ppk"。

4-2. 呼叫外壳

要通过WinSCP命令调用shell,请按以下方式编写。

option batch on
option transfer binary
open test:testpassword@192.168.50.10
call sh /tmp/test.sh
close
exit

test.sh'被'call sh /tmp/test.sh'执行。 也可以传递参数。 当传递参数时,写成 "call sh /tmp/test.sh param1"。

5. 摘要

已经介绍了WinSCP命令。

如果你通常每天使用WinSCP GUI来记录和上传文件,你可以通过创建本文所述的工具来实现自动化。 这可能是一个小任务,但会占用很多时间,除非是每天都做。 我们鼓励你创造工具来提高效率。

■技术文章

查看全部技术文章。


■作者简介

查看作者简介。


■联系我们

就本文内容联系我们。