使用 WinSCP 自动上传和下载 SFTP 文件
出版日期:
更新:
技术文章 > 使用 WinSCP 自动上传和下载 SFTP 文件
2026 状态和安全使用
结论:将 WinSCP.com 与脚本文件一起使用,固定服务器的 SSH 主机密钥指纹,对源和进程参数保密,启用日志记录,并在 WinSCP 返回非零退出代码时使作业失败。
你将学到什么
- 脚本化的
open、get和put操作如何适应批处理工作流程。 - 主机密钥验证如何防止无人值守作业信任错误的服务器。
- 如何通过日志、显式路径和错误处理使传输可重复。
适用人群:Windows 管理员自动将文件传输到已知的 SFTP 端点。
截至 2026 年的适用情况:下面的原始脚本包含说明性纯文本凭据并以交互方式接受主机。仅将其作为历史学习材料;不要部署这些机密或绕过主机密钥检查。首选 SSH 密钥或经批准的秘密存储并测试恢复行为。
安全注意事项:原始文章中的命令和配置示例尚未在当前生产环境中重新运行。应用之前,请在单独的测试环境中验证支持的版本、备份、访问控制和回滚步骤。
官方主要来源
概述。
使用WinSCP命令创建一个自动文件下载和上传工具。 使用命令提示符执行WinSCP提供的命令。 毫不奇怪,WinSCP提供了命令。 你通常使用 "WinSCP.exe",但 "WinSCP.com "也可以使用。 你几乎不会在快捷方式目的地中看到 "C:\Program Files (x86)\WinSCP "文件夹,因为你通常基本上是从快捷方式中打开它,但如果你看一下快捷方式目的地,"WinSCP.com "也应该存放在那里。 这是该工具的创建地。
目录
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文件作为激活的起点。
@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命令。
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文件作为激活的起点。
@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 "中描述。
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来记录和上传文件,你可以通过创建本文所述的工具来实现自动化。 这可能是一个小任务,但会占用很多时间,除非是每天都做。 我们鼓励你创造工具来提高效率。
