WinSCP命令行简化:您的完整参考

WinSCP,作为安全文件传输的基本工具,不仅提供了图形用户界面。WinSCP命令行功能允许IT专业人员和系统管理员直接从控制台管理和自动化文件传输,提高了工作流程的效率和灵活性。

要了解WinSCP GUI的方方面面,请查看本文的补充文章WinSCP GUI:终极指南

在这个终极指南中发现WinSCP提供的每个命令行功能。您将逐步学习如何利用WinSCP命令行来最大化您的生产力并简化文件传输流程。

让我们深入了解WinSCP的命令行文件管理世界吧!

使用WinSCP命令行的先决条件

  • A Windows XP+ PC – This tutorial will use Windows 10 Enterprise.
  • A remote Linux host – This tutorial will use an Ubuntu 18.04.5 LTS machine.
  • A user account on the remote SSH host with sudo permissions.

使用WinSCP命令行生成会话URL

虽然WinSCP GUI提供了一个方便的登录窗口用于建立连接,但WinSCP命令行需要一种不同的方法。您必须以更直接的方式指定连接属性,而不是交互式窗口。

Connection attributes

要指示WinSCP命令行连接到哪里,需要使用会话URL。此URL封装了GUI中定义的连接属性。

A basic session URL follows this structure:

<protocol>://<username>:<password>@<host name>/<folder path>

例如,要在WinSCP中使用SFTP连接到主机1.1.1.1,用户名为adam,密码为pw,会话URL如下:

sftp://adam:pw@1.1.1.1

如果您已经设置了WinSCP站点,您可以轻松找到会话URL。打开WinSCP GUI,点击会话,右键单击您的站点,然后选择生成会话URL/代码

WinSCP site

会话URL对话框提供了各种自定义选项,用于连接,每个选项都影响WinSCP与远程主机的交互方式。

  • 初始目录 – 指定WinSCP连接后打开的远程目录。
  • SSH主机密钥 – 使用现有的SSH密钥进行远程主机身份验证。
  • WinSCP特定URL – 生成一个唯一的会话URL,如WinSCP-sftp://,专门用于WinSCP的理解,避免与默认Web浏览器发生冲突。
  • 保存扩展名 – 通常与WinSCP特定的URL一起使用,以进一步减小应用程序冲突。

当所有选项都启用时,会话URL格式应如下:

<protocol>://<username>:<password>@<host name>/<folder path><save extension>
Generate Session URL/Code

掌握WinSCP命令行:生成会话连接代码

有了会话URL,WinSCP更进一步地提供了在生成会话URL/代码窗口的脚本选项卡中选择的代码示例:

  • 脚本文件
  • 批处理文件
  • 命令行
  • PowerShell脚本

选择您喜欢的脚本类型,WinSCP将生成连接到远程主机所需语法,使用WinSCP命令行

Generating Session Connection Code

对于在.NET、C#或PowerShell中编码,请切换到.NET装配代码选项卡,如下所示。

.NET assembly code tab

了解WinSCP.exe与WinSCP.com在WinSCP命令行环境中的区别

知道如何生成会话URL对于使用WinSCP命令行工具至关重要。让我们探讨如何使用这些工具连接到主机,首先了解winscp.exewinscp.com之间的区别。

Winscp.exe既是GUI启动器,也是用于简单任务的命令行实用程序。如果指定正确的参数,您可以将其用于基本命令。

winscp.exe视为WinSCP的GUI功能和命令行界面之间的桥梁。

对于更复杂的任务,特别是在脚本中,winscp.com是您的首选。这个基于控制台的工具非常适合自动化脚本,并支持一系列SSH功能。它提供了一个真正的、非交互式的WinSCP命令行体验。

无论您选择哪个,首先打开命令提示符(cmd.exe或PowerShell),然后导航到WinSCP安装目录。

cd 'C:\Program Files (x86)\WinSCP'

有了准备好的命令提示符,让我们继续使用WinSCP进行远程连接。

使用WinSCP.exe:使用会话URL连接远程主机

通过以会话URL作为参数运行winscp.exe是使用WinSCP命令行连接到远程主机的最简单方法。例如,要连接到主机54.179.19.216,用户名为automate,密码为automate,使用sftp,然后导航到/tmp目录,请使用以下命令:

WinSCP.exe sftp://automate:automate@54.179.19.216/tmp/

为了提高安全性,您可以使用/privatekey参数连接到远程主机,而不是使用密码。虽然这种方法更安全,但设置私钥的复杂性超出了本教程对WinSCP命令行的范围。

以下是使用用户名automate和私钥mykey.ppk通过scp连接到主机54.179.19.216的示例。

winscp.exe scp://[email protected]/tmp/ /privatekey=mykey.ppk

使用WinSCP.exe高效下载文件,无需站点

WinSCP命令行通过winscp.exe可以在没有预定义WinSCP站点的情况下快速传输文件。让我们探讨在没有站点配置的情况下从远程主机下载文件的方法。例如,在不使用站点配置的情况下从远程主机54.179.19.216下载/tmp目录中的所有文件。

1. 开始生成会话URL。下面是一个例子,连接到远程主机的凭据为automate,并着陆在/tmp目录下。

#生成的会话URL
sftp://automate:automate@54.179.19.216/tmp

2. 运行winscp.exe并使用会话URL访问WinSCP传输设置对话框。本地目录默认为~\Documents,WinSCP将目标所有远程目录中的文件(\\*.*)。

#命令语法:winscp.exe [/path/[file]]
winscp.exe sftp://automate:automate@54.179.19.216/tmp

3. 点击确定以开始传输。WinSCP将下载所有文件从远程/tmp目录到您选择的本地目录通过SFTP。

Downloading the Files without a Site

使用WinSCP.exe上传文件而不使用站点

在掌握文件下载后,让我们转向使用WinSCP命令行winscp.exe上传文件到远程主机。这个过程类似于下载,但这次您还需要使用/upload开关,指定要上传的文件或文件夹。

#上传文件a.txt使用winscp.exe到没有站点的远程服务器。
.\WinSCP.exe sftp://automate:automate@54.179.19.216/tmp/ /upload C:\Users\shanky\Desktop\a.txt

执行上面的命令会弹出WinSCP上传对话框,指示要上传的文件(*.*)到远程主机的/tmp目录。

Uploading the Files without a Site

上传后,请使用SSH客户端登录远程主机,并使用诸如pwdls -lh等命令验证上传成功,这些命令将显示目录内容,确认成功传输。

File Uploaded Successfully on Remote Machine

利用WinSCP.exe下载文件使用站点

会话URL对于临时连接很实用,但拥有预配置的WinSCP站点会简化流程。如果您已经使用WinSCP一段时间,您可能已经设置了几个站点。

使用winscp.exe,您可以轻松地利用这些在GUI中创建的站点连接到远程主机,无需记住会话URL的详细信息。

要在WinSCP中找到保存的站点,请导航到会话 -> 站点 -> 站点管理器

例如,让我们探讨使用预先存在的站点下载文件与WinSCP命令行

1. 使用已配置的WinSCP站点连接到远程主机。下面的示例演示了使用名为Adamsite的站点进行连接。

# 使用WinSCP站点连接
winscp.exe Adamsite

连接成功后,WinSCP会显示状态通知。

Connecting to Remote Machine Using a Site

2. 接下来,执行winscp.exe,使用协议(sftp)、站点名称(Adamsite)和目标目录(/tmp)。这种方法会弹出WinSCP传输设置对话框,准备进行文件下载操作。

# 使用站点进行远程连接
winscp.exe sftp://Adamsite/tmp

点击“确定”开始通过SFTP从远程主机的/tmp目录下载所有文件到您的本地目录。

Downloading Files Using a Site

要将文件从本地计算机上传到远程主机,该过程类似。使用/upload开关以及文件或目录路径,例如winscp.exe Site3 /upload .\license.txt。不需要完整的URL规范(sftp://Adamsite/tmp)。

使用WinSCP.exe简化远程文件编辑

需要在远程主机上编辑文本文件吗?跳过手动下载-编辑-上传循环。WinSCP命令行提供了一种更高效的方法,使用/edit参数。只需指定站点名称、/edit和远程文件路径。

示例:

# 在远程主机上编辑文件
winscp.exe /edit /Adamsite/path/to/file.txt
# 使用WinSCP命令行编辑远程文件
.\WinSCP.exe Adamsite /edit /tmp/a.txt

执行以上命令会启动您默认的文本编辑器,允许您根据需要修改远程文件。这种无缝集成是WinSCP命令行功能的关键特性之一。

Editing Remote Files Using a Site

编辑后,只需保存文件。WinSCP会负责更新远程主机上的文件,简化编辑上传过程。

使用WinSCP.exe会话日志优化工作流程

为了全面记录您的操作,WinSCP命令行提供会话日志记录功能。此功能对于跟踪会话期间执行的命令,帮助故障排除和记录非常宝贵。

要启用会话日志记录,在连接会话时包含最多三个参数:

# 会话日志记录参数
/log="<log file path>" /loglevel=<level> /logsize=<size>
  • /log – 指定日志文件的路径。
  • /loglevel – 设置日志的详细程度,从Reduced1)到Debug2)不等。
  • /logsize – 定义日志文件的大小和轮换方式,格式为<total archived logs>*<max log file size>

以下是winscp.exe连接到主机并将活动记录到C:\winscp.logDebug级别的示例。该命令保留最多五个10MB的日志文件(5*10MB)。

# WinSCP会话日志示例
winscp.exe sftp://[email protected]/tmp/ /log="C:\\winscp.log" /loglevel=2 /logsize=5*10M

使用WinSCP.com交互命令探索高级功能

虽然winscp.exe提供了远程连接的出色介绍,但winscp.com提升了您的命令行体验,提供更深入的交互和控制。

开始通过命令行环境打开winscp.com。您将进入一个类似于SSH的交互式会话,由winscp>提示表示。

.\WinSCP.com

使用open命令连接到远程计算机,后跟所需的站点名称。

open Adamsite

通过WinSCP命令行连接到远程主机后,就像使用Adamsite所示的那样,您将发现自己处于类似SSH会话的环境中。在这里,您可以执行命令并与远程主机进行高效交互。

Interactively Running Commands using winscp.com

增强安全性:在WinSCP中使用新的密钥对(主机密钥)

公钥认证增强了连接会话时的安全性。要使用它,首先获取会话的主机密钥指纹。在WinSCP文件夹中使用以下语法执行ssh-keygen命令。

此命令生成一个SSH密钥对,用于安全认证。一旦执行,您将收到连接winscp.com会话所需的指纹。

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
Verifying SSH Key Fingerprint

要使用hostkey参数连接,请如下例所示提供生成的指纹。

在使用ssh-keygen生成的指纹时,请包括前缀ssh-rsa 2048

winscp.com open sftp://automate:[email protected]/  -hostkey="ssh-rsa 2048 x4DeZzv4jcWEk2zeeJgr5JeJ+z0xA+lGa3LC0q/B+88="

通过WinSCP.com最大化效率:使用/command参数

在某些任务中,交互式会话非常棒,但对于脚本和自动化来说,非交互式命令执行至关重要。通过winscp.com/command参数,您可以在单个步骤中建立会话、执行命令并断开连接。

例如,使用/command参数将本地文件传输到远程主机。下面的示例演示了从C:\abc\abc.txt复制文件到远程主机/tmp目录的过程,远程主机的IP是13.213.61.127

/command参数接受两个字符串作为参数:一个用于建立会话,另一个用于实际命令执行。

# 使用WinSCP进行非交互式文件传输
WinSCP.com /command "open sftp://adam:[email protected]/tmp" "put C:\\abc\\abc.txt"
Session log for adam@13.213.61.127
C:\abc\abc.txt            |            0 B |    0.0 KB/s | binary |   0%

使用WinSCP.com自动化任务:/script参数

对于更复杂的自动化需求,winscp.com中的/script参数允许您从脚本中执行一系列命令。在处理远程主机上的重复任务或复杂操作时,此功能非常有价值。

要使用WinSCP命令行中的/script参数,请首先使用您喜欢的文本编辑器在桌面上创建一个名为upload_file_script.txt的脚本文件。

在远程计算机的/tmp目录中准备一个名为a.txt的空文本文件。

C:\abc上创建一个本地目录。

接下来,请将以下内容输入到upload_file_script.txt并保存。此脚本从远程/tmp目录下载a.txt文件,然后重新上传为new_file.txt

# 用于文件传输的 WinSCP 脚本
 open sftp://automate:automate@54.179.19.216/  -hostkey="ssh-rsa 2048 x4DeZzv4jcWEk2zeeJgr5JeJ+z0xA+lGa3LC0q/B+88="
 cd /tmp
 get a.txt C:\abc\
 close
 open sftp://automate:automate@54.179.19.216/ -hostkey="ssh-rsa 2048 x4DeZzv4jcWEk2zeeJgr5JeJ+z0xA+lGa3LC0q/B+88="
 cd /tmp
 put C:\abc\new_file.txt 
 close
 exit

使用以下命令在 WinSCP 中使用/script参数执行此脚本:

使用/ini=nul开关防止 WinSCP 在退出时保存任何会话配置。

winscp.com /ini=nul /script=upload_file_script.txt
   # 输出
   Authenticating...
   Session started.
   /tmp
   a.txt                     |           10 B |    0.0 KB/s | binary | 100%
   Session closed.
   # 用于上传的新会话
   Session started.
   /tmp
   C:\abc\new_file.txt       |            0 B |    0.0 KB/s | binary |   0%
   Session closed.

利用 WinSCP.com 进行密钥转换

WinSCP 支持基于密码和证书或公钥身份验证。要使用公钥身份验证,需要兼容的私钥格式。WinSCP 提供了转换密钥格式以实现兼容性的帮助。

例如,使用WinSCP 命令行将 PEM 格式私钥(如来自 AWS EC2 的私钥)转换为 Putty 友好格式。在winscp.com中,/keygen参数有助于进行此转换。

  • 应用/keygen参数,后跟密钥的当前路径。
  • 包括-o参数以指定转换密钥的输出文件路径。
  • 可选择使用-c参数向转换后的密钥添加注释。
.\WinSCP.com /keygen C:\Users\shanky\Desktop\testing.pem -o C:\Users\shanky\Desktop\testing.ppk -c "Converted from OpenSSH format"

结论

通过这份全面的WinSCP命令行指南,再加上WinSCP GUI指南,您现在可以充分利用WinSCP的功能。无论是文件传输、命令执行、脚本运行还是密钥转换,WinSCP都是任何IT专业人士的多功能工具。

您打算如何将WinSCP整合到您的工作流程中?分享您的想法和经验!

Source:
https://adamtheautomator.com/winscp-command-line/