WinSCP 提供命令行工具
winscp.com
(控制台) 和winscp.exe
(带可选界面),用于脚本化执行文件传输(FTP, SFTP, SCP)和同步任务,实现自动化操作。
WinSCP 是一款广受欢迎的免费开源 SFTP、FTP、WebDAV、Amazon S3 和 SCP 客户端,以其直观的图形用户界面 (GUI) 而闻名,许多用户(尤其是系统管理员、开发人员和需要自动化任务的用户)可能不知道 WinSCP 也提供了强大的命令行功能,掌握 WinSCP 命令行可以极大地提升效率,实现文件传输的自动化、集成到脚本或批处理文件中,以及在无头服务器(没有图形界面)上执行操作。
WinSCP 提供了两个主要的可执行文件用于命令行操作:
-
winscp.com
(控制台版本 – 首选命令行工具):- 这是最常用的命令行接口。
- 它在 Windows 命令提示符 (
cmd.exe
) 或 PowerShell 窗口中运行。 - 它将所有输出(包括错误信息、传输进度、脚本执行结果)直接打印到控制台窗口。
- 非常适合交互式命令行使用、编写批处理脚本 (
.bat
/.cmd
) 或需要捕获输出的场景。 - 使用方式: 打开命令提示符或 PowerShell,导航到 WinSCP 的安装目录(通常是
C:\Program Files (x86)\WinSCP
),或者确保该目录已添加到系统的PATH
环境变量中,然后直接输入winscp.com
后跟命令和参数。
-
winscp.exe
(GUI 版本):- 这是启动 WinSCP 图形界面的主程序。
- 它也可以接受命令行参数,但行为与
winscp.com
不同:- 默认情况下,它会启动 GUI 界面,并根据参数执行操作(如打开特定会话、传输文件)。
- 如果使用
/console
参数,它会尝试在控制台窗口中运行(类似于winscp.com
),但功能和支持可能不如winscp.com
完整和稳定。
- 通常不推荐将
winscp.exe
作为主要的命令行工具,除非有特定需求(如通过命令行参数启动 GUI 并执行一个操作后关闭)。winscp.com
是更纯粹、更可靠的选择。
如何输入 WinSCP 命令行(使用 winscp.com
)
以下是使用 winscp.com
输入命令行的基本步骤和常见用法:
-
打开命令提示符 (CMD) 或 PowerShell:
- 在 Windows 搜索栏中键入
cmd
或PowerShell
,然后选择相应的应用程序打开。
- 在 Windows 搜索栏中键入
-
(可选但推荐) 导航到 WinSCP 安装目录:
- 如果你没有将 WinSCP 添加到系统
PATH
,需要先切换到其安装目录,默认路径通常是:cd "C:\Program Files (x86)\WinSCP"
或者对于 64 位系统上的 64 位 WinSCP:
cd "C:\Program Files\WinSCP"
- 如果你没有将 WinSCP 添加到系统
-
输入
winscp.com
命令:- 基本语法是:
winscp.com [选项] [命令]
[选项]
: 控制 WinSCP 的行为,常用选项包括:/console
:强制在控制台模式下运行(主要用于winscp.exe
,winscp.com
默认就是)。/ini=
:指定要使用的配置文件路径(替代默认的WinSCP.ini
)。/log=
:指定日志文件的路径。强烈建议在脚本中使用此选项记录操作!/log="C:\logs\winscp_transfer.log"
。/loglevel=
:设置日志详细程度(如0
-静默,1
-基本信息,2
-详细,3
-调试)。1
或2
足够。/timeout=
:设置操作超时秒数。/rawsettings
:允许在命令行中直接传递 WinSCP 配置设置(高级用法)。
[命令]
: 指定要执行的操作,命令可以是:- 交互式命令: 直接在
winscp.com
后不加命令启动,会进入一个类似 FTP 客户端的交互式命令行提示符 (winscp>
),在此提示符下可以输入各种命令(如open
,get
,put
,ls
,exit
),这适合临时操作。 - 单条命令: 使用
/command
选项执行单条命令,执行后 WinSCP 会退出。winscp.com /command "option batch abort" "option confirm off" "open sftp://username:password@example.com/" "get /remote/path/file.txt C:\local\path\" "exit"
- 这个例子:
option batch abort
:遇到错误时中止脚本(重要!)。option confirm off
:关闭所有确认提示。open ...
:连接到 SFTP 服务器(注意:密码明文不安全!)。get ...
:下载远程文件到本地。exit
:退出 WinSCP。
- 这个例子:
- 脚本文件: 使用
/script=
选项执行一个包含多条 WinSCP 命令的文本文件(脚本),这是最常用、最强大的方式,尤其对于复杂或重复性任务。winscp.com /script="C:\path\to\your\script.txt" /log="C:\logs\script_run.log"
- 脚本文件 (
script.txt
) 内容示例:# 这是一行注释 option batch abort option confirm off open sftp://username:password@example.com/ -hostkey="ssh-rsa 2048 xxxxxxxxxxx..." get /remote/directory/*.log C:\local\logs\ put C:\local\file.zip /remote/directory/ rm /remote/directory/oldfile.tmp exit
- 关键点:
- 每行一个命令。
- 使用 开头表示注释。
open
命令中,-hostkey
参数用于验证服务器主机密钥指纹(非常重要!避免中间人攻击),你可以在首次 GUI 连接时从 WinSCP 的对话框中复制正确的指纹。强烈建议使用此参数或公钥认证替代密码。- 安全警告: 在脚本或命令行中直接写入密码 (
username:password@
) 是极其不安全的,因为密码会以明文形式暴露在脚本文件、命令行历史或进程列表中。最佳实践是使用公钥认证或 WinSCP 的/passive
模式配合会话存储(见下文)。
- 脚本文件 (
- 交互式命令: 直接在
- 基本语法是:
-
执行并查看结果:
- 按 Enter 键执行命令。
- 操作的状态、进度、错误信息等将直接输出到控制台窗口。
- 如果使用了
/log
选项,详细信息也会记录到指定的日志文件中,便于后续排查问题。
关键命令示例
在交互式提示符、/command
参数或脚本文件中,你可以使用丰富的 WinSCP 命令,一些最常用的包括:
open [sessionurl|sessionname]
:连接到服务器,可以使用保存的会话名(更安全方便)或完整的 URL (protocol://user:pass@host:port
)。优先使用保存的会话名!get [-delete] <remotefile> [localfile]
:下载远程文件。-delete
选项在下载后删除远程文件。put [-delete] <localfile> [remotefile]
:上传本地文件。-delete
选项在上传后删除本地文件。mv <oldremote> <newremote>
:重命名或移动远程文件/目录。rm <remotefile>
:删除远程文件。rmdir <remotedir>
:删除远程目录(必须为空)。mkdir <remotedir>
:创建远程目录。ls [remotepath]
:列出远程目录内容。lls [localpath]
:列出本地目录内容。cd <remotepath>
:改变远程工作目录。lcd <localpath>
:改变本地工作目录。call <command>
:在远程服务器上执行命令(需要 shell 访问权限)。exit
/bye
:关闭连接并退出 WinSCP。option batch abort|continue|off
:设置批处理模式(出错时中止/继续/关闭)。option confirm on|off
:开启/关闭操作确认提示。
最佳实践与安全建议 (E-A-T 重点)
- 优先使用
winscp.com
: 这是为命令行设计的工具,更可靠,输出更清晰。 - 使用脚本文件 (
/script=
): 对于复杂或重复任务,将命令写入脚本文件比在命令行中拼接长串/command
更易管理、维护和复用。 - 务必启用日志 (
/log=
): 这是诊断问题的关键,至少记录基本信息 (/loglevel=1
)。 - 强烈推荐使用保存的会话:
- 在 WinSCP GUI 中创建并保存连接会话(包含协议、主机、端口、用户名、私钥路径等)。
- 在命令行中使用
open sessionname
来连接(open "MySFTPserver"
)。 - 优势:
- 安全性: 避免在脚本或命令行历史中暴露密码或私钥密码,WinSCP 会安全地(加密)存储这些敏感信息在配置文件中。
- 便捷性: 简化命令,无需每次都输入完整的 URL 和认证细节。
- 可维护性: 服务器连接信息集中管理,一处修改,多处生效。
- 绝对避免明文密码: 永远不要在脚本文件、批处理文件或命令行参数中直接写入
username:password@
,使用保存的会话是首选,如果必须动态提供密码(风险仍高),考虑使用 WinSCP 的/passive
模式配合/rawsettings
从安全来源(如加密文件、密码管理器)读取,但这非常复杂且通常不推荐。 - 验证主机密钥 (
-hostkey
): 在open
命令中(尤其是在脚本中)必须使用-hostkey="fingerprint"
参数指定预期的服务器主机密钥指纹,这是防止中间人攻击的关键安全措施,首次通过 GUI 连接时,WinSCP 会显示指纹,请复制并保存在脚本中。 - 使用公钥认证: 对于 SSH/SFTP/SCP,尽可能配置公钥认证,这比密码更安全,且通常可以免密登录(或使用代理/密钥管理器处理私钥密码),在保存的会话中配置私钥路径。
- 设置批处理选项 (
option batch abort
): 在脚本开头设置option batch abort
和option confirm off
,确保脚本在遇到错误时停止,并且不会因确认提示而挂起。 - 错误处理: WinSCP 命令行退出时会返回一个退出代码(Errorlevel),在批处理脚本 (
*.bat
) 中,可以使用%errorlevel%
或if errorlevel
语句检查操作是否成功,并根据结果进行后续处理(如发送通知)。 - 测试脚本: 在正式环境运行自动化脚本前,务必在测试环境中充分测试,确保其按预期工作,特别是删除 (
rm
,rmdir
) 和覆盖操作。
WinSCP 的命令行功能(主要通过 winscp.com
和 /script=
参数)是其强大自动化能力的核心,通过遵循本文的步骤——打开命令行、使用 winscp.com
、编写脚本或命令、并严格遵守安全最佳实践(尤其是使用保存的会话和验证主机密钥)——你可以高效、安全地实现文件传输、目录同步、远程文件管理等任务的自动化,显著提升工作效率,安全性是重中之重,避免明文密码并验证服务器身份是保护系统和数据的关键。
引用说明:
- 基于 WinSCP 官方文档中关于命令行参数和脚本的说明:
https://winscp.net/eng/docs/commandline
- WinSCP 脚本命令的详细参考:
https://winscp.net/eng/docs/scripting
- 关于安全使用命令行(特别是密码和主机密钥)的最佳实践参考了 WinSCP 官方安全建议:
https://winscp.net/eng/docs/security
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6758.html