croc 檔案傳輸教程:跨平臺加密傳送、斷點續傳與自建中繼

介紹 croc 在 Windows、Linux 和 macOS 間加密傳輸檔案的方法,涵蓋安裝、口令接收、目錄與文字傳輸、斷點續傳、代理及自建 relay。

臨時把一個大檔案從 Windows 傳到 Linux,常見方案不是需要登入雲盤,就是要配置 SSH、開放埠或搭建臨時 HTTP 服務。croc 把這個過程簡化為一個傳送命令和一段短語:兩端透過中繼建立連線,再使用 PAKE 派生金鑰進行端到端加密。

croc 支援 Windows、Linux 和 macOS,可以傳送單個檔案、多個檔案、目錄或短文字,並能繼續中斷的傳輸。預設公共中繼適合臨時使用;對網路邊界、可用性或連線記錄有更嚴格要求時,也可以執行自己的 relay。

快速答案

傳送端執行:

1
croc send report.zip

終端會顯示一段類似 example-code-phrase 的接收短語。Windows 接收端直接執行:

1
croc example-code-phrase

Linux 和 macOS 的當前推薦方式是透過環境變數傳入口令,避免口令出現在程序名稱中:

1
CROC_SECRET=example-code-phrase croc

確認傳送方、檔名和大小無誤後接受傳輸。不要把接收短語釋出到群聊、工單或公開日誌;拿到短語的人可能嘗試加入傳輸。

croc 為什麼不需要埠轉發

croc 預設讓傳送端和接收端都主動連線 relay,因此兩臺裝置即使位於不同 NAT 或防火牆之後,通常也不需要配置公網 IP、入站埠或本地伺服器。

relay 負責協助兩端找到彼此並轉發資料。檔案內容由傳送端和接收端透過 PAKE(Password-Authenticated Key Agreement,口令認證金鑰協商)生成的金鑰進行端到端加密。中繼解決的是連通性問題,短語則參與建立雙方共享的加密會話。

這不代表可以忽略口令安全。自動生成的短語應透過可信渠道交給接收者,傳輸前仍要核對檔案資訊。對敏感環境,還應評估中繼可見的連線後設資料、終端歷史、剪貼簿和接收目錄許可權。

安裝 croc

Windows

使用 WinGet:

1
winget install schollz.croc

也可以選擇 Scoop 或 Chocolatey:

1
scoop install croc
1
choco install croc

安裝完成後檢查版本:

1
croc --version

macOS

Homebrew 使用者執行:

1
brew install croc

使用 MacPorts:

1
2
sudo port selfupdate
sudo port install croc

Linux

Arch Linux:

1
sudo pacman -S croc

Fedora:

1
sudo dnf install croc

如果發行版倉庫沒有合適版本,可以從官方 Releases 下載對應檔案,或使用官方提供的安裝指令碼:

1
curl https://getcroc.schollz.com | bash

在生產裝置上執行遠端指令碼前,建議先下載並審查內容。已經安裝 Go 1.22 或更高版本時,也可以從原始碼安裝:

1
go install github.com/schollz/croc/v10@latest

傳送檔案、目錄和多個專案

傳送一個檔案:

1
croc send backup.tar.zst

傳送整個目錄:

1
croc send project-assets

一次傳送多個檔案和目錄:

1
croc send notes.md photo.jpg logs config

傳送專案目錄時,可以排除不需要的依賴和虛擬環境:

1
croc send --exclude "node_modules,.venv,.git" my-project

--exclude 接收逗號分隔的名稱。傳輸前最好先確認排除範圍,避免把金鑰檔案、環境變數檔案、快取和大型依賴目錄一起傳送。

自定義接收短語

預設隨機短語適合大多數情況。若需要透過電話等方式傳達,可以指定至少六個字元的短語:

1
croc send --code correct-horse-27 report.zip

自定義短語必須足夠難猜。不要使用專案名、手機號、日期或 123456 之類的弱口令。短語只應交給預期接收者,傳輸結束後不要重複用於其他檔案。

Linux 和 macOS 接收端推薦這樣使用:

1
CROC_SECRET=correct-horse-27 croc

在可信的單使用者系統中,可以用經典方式恢復把短語直接作為引數的行為:

1
croc --classic

經典方式更方便,但口令可能透過程序引數暴露給本機其他程序或監控工具。多人共用的伺服器不建議這樣設定。

傳送文字、使用管道和二維碼

傳送短文字或 URL:

1
croc send --text "https://example.com/download"

從標準輸入傳送內容:

1
cat result.json | croc send

接收後直接寫入檔案:

1
croc --yes example-code-phrase > result.json

向手機傳送時,可以讓終端顯示二維碼:

1
croc send --qr photo.jpg

二維碼同樣包含加入傳輸所需的資訊,不應展示在公開直播、截圖或錄影中。

斷點續傳怎麼使用

croc 支援恢復中斷的傳輸。網路斷開後,保留髮送端原檔案和接收端已經寫入的部分檔案,再重新執行傳輸流程。接收路徑、檔案內容或中繼條件發生明顯變化時,恢復可能無法按預期進行。

實際操作時注意三點:

  1. 不要刪除或改名接收端的未完成檔案;
  2. 不要在恢復前修改傳送端原始檔;
  3. 確認磁碟剩餘空間足夠容納完整檔案。

如果恢復反覆失敗,先改用一個小檔案測試兩端和 relay 的連通性,再檢查版本是否相差過大、代理是否穩定,以及安全軟體是否攔截連線。

透過 SOCKS5 代理傳輸

croc 可以指定 SOCKS5 代理。例如本機代理監聽 127.0.0.1:9050

1
croc --socks5 "127.0.0.1:9050" send backup.tar.zst

代理會影響連線路徑和速度,但不會替代 croc 本身的加密。接收端是否也需要代理取決於其網路環境。排障時應分別驗證代理埠、DNS 處理方式和 relay 地址是否可達。

自建 croc relay

最簡單的方式是在伺服器上直接執行:

1
croc relay

預設使用 TCP 埠 9009-9013。需要自定義時至少提供兩個埠:

1
croc relay --ports 1111,1112

傳送端指定自建中繼:

1
croc --relay "relay.example.com:9009" send report.zip

使用 Docker 併為 relay 設定密碼:

1
2
3
4
5
6
docker run -d \
  --name croc-relay \
  --restart unless-stopped \
  -p 9009-9013:9009-9013 \
  -e CROC_PASS='CHANGE_THIS_PASSWORD' \
  docker.io/schollz/croc

傳送時同時提供 relay 地址和密碼:

1
2
3
croc --pass CHANGE_THIS_PASSWORD \
  --relay "relay.example.com:9009" \
  send report.zip

部署前需要在雲防火牆和主機防火牆中放行實際使用的 TCP 埠。relay 密碼不要直接寫進共享指令碼、Shell 歷史或公開的 Compose 檔案;更合適的做法是從受控環境變數或金鑰管理系統注入。

自建 relay 可以控制中繼位置、訪問策略和可用性,但不能替代端點安全。傳送端被植入惡意程式、接收目錄許可權錯誤或短語洩露時,自建伺服器也無法解決這些問題。

自動化時需要謹慎的引數

以下命令會跳過確認並允許覆蓋同名檔案:

1
croc --yes --overwrite example-code-phrase

它適合明確受控的自動化任務,不適合在不可信目錄中隨手執行。預設的確認提示可以幫助發現檔名、大小或來源異常,除非指令碼已經獨立驗證接收目標,否則不要同時啟用 --yes--overwrite

靜默傳送可以使用:

1
croc --quiet send report.zip

靜默模式會減少日誌輸出,也可能掩蓋失敗原因。定時任務中應同時檢查退出碼,並把錯誤輸出寫入受保護的日誌。

常見故障排查

兩端輸入短語後一直無法連線

先確認兩端 croc 版本、系統時間和網路訪問是否正常,再檢查公司防火牆、代理或運營商是否阻止 relay 埠。可以用小檔案重試,判斷問題來自連線還是檔案本身。

Linux 或 macOS 直接執行 croc 短語 不符合預期

新版推薦把短語放入 CROC_SECRET

1
CROC_SECRET=example-code-phrase croc

這是為了減少短語透過程序名稱洩露的風險,不是安裝失敗。

接收端已經存在同名檔案

優先保留確認提示,核對來源後再決定是否覆蓋。只有在指令碼已驗證檔案身份和目標路徑時,才考慮 --yes --overwrite

自建 relay 可以連線但無法傳輸

確認對映和放行的是完整埠範圍,而不只是第一個埠。預設 relay 使用 9009-9013;自定義範圍時,Docker 對映、主機防火牆、雲安全組和 croc 啟動引數必須一致。

croc 適合哪些場景

croc 很適合臨時跨平臺傳檔案、遠端協助使用者匯出日誌、在沒有 SSH 賬號的裝置間傳遞構建產物,以及把目錄從舊電腦遷移到新電腦。它不需要雙方註冊賬號,也不要求接收端開放入站埠。

如果需要長期同步、版本歷史、團隊許可權管理或大規模備份,Syncthing、物件儲存、rsync 或專門的備份系統通常更合適。croc 的定位是簡化一次性或短期傳輸,而不是替代完整的資料管理方案。

總結

croc 把跨網路檔案傳輸壓縮為“傳送檔案、分享短語、接收確認”三個步驟,同時保留端到端加密、跨平臺、斷點續傳和自建中繼能力。日常使用預設公共 relay 即可;敏感或受控網路可以部署自己的 relay,但仍要保護接收短語、終端歷史、檔案許可權和端點裝置。

專案地址:schollz/croc