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 圖形用戶界面,點擊 會話,右鍵單擊您的站點,然後選擇 生成會話 URL/代碼

WinSCP site

會話 URL 對話框提供了各種自定義選項,用於您的連接,每個選項都會影響 WinSCP 與遠程主機的交互作用。

  • 初始目錄 – 指定 WinSCP 在連接時打開的遠程目錄。
  • SSH 主機密鑰 – 使用現有的 SSH 密鑰進行遠程主機驗證。
  • WinSCP 特定 URL – 生成一個獨特的會話 URL,如 WinSCP-sftp:// ,專門用於 WinSCP 的理解,避免與默認網絡瀏覽器的衝突。
  • 保存擴展 – 通常與 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命令行的最简单方法之一是运行winscp.exe。例如,要使用sftp连接到54.179.19.216主机,使用用户名automate和密码automate,然后导航到/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.exeWinSCP命令行,即使没有预定义的WinSCP站点,您也可以快速传输文件。让我们探索如何从远程主机下载没有站点配置的文件。例如,使用SFTP下载远程主机54.179.19.216中/tmp目录中的所有文件。

1. 開始生成會話 URL。以下是一個連接到遠程主機,使用憑據 automate 並登陸到 /tmp 目錄的示例。

# 生成的會話 URL
sftp://automate:automate@54.179.19.216/tmp

2. 使用會話 URL 執行 winscp.exe 以訪問 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 選項,指定要上傳的文件或文件夾。

# 使用 winscp.exe 上傳文件 a.txt 到遠程服務器,而不使用站點。
.\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 中保存的站點,請導航至 Session -> Sites -> Site Manager

例如,讓我們探索使用預先存在的站點使用 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

點擊確定開始從遠端主機的 /tmp 目錄下載所有文件到您本地目錄,使用 SFTP。

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 – 定義日誌文件的大小和輪換方式,格式為 <總歸檔日誌數>*<最大日誌文件大小>

以下是一個範例,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複製到遠程主機13.213.61.127上的/tmp目錄。

/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/