[Mac/Linux] 使用 curl + ssh tunnel,下載不同網段電腦的 SMB 共享檔案

[Mac/Linux] 使用 curl + ssh tunnel,下載不同網段電腦的 SMB 共享檔案

之前曾經 利用 ssh tunnel 經由跳板連到別的網段的電腦

我很常使用這個技巧,因為公司的 Wi-fi 網路與 Lab 網段是切開的~

 

今天我想要從 Lab 網段的一個 SMB 共享目錄,下載東西回來 Mac 上。

找了半天,發現 curl 自己可以支援 smb:// 這樣子的網址,

舉例來說:

curl smb://user:pass@hostname/path/file -O

 

於是可以把 ssh tunnel 和 curl 結合起來~

假設我的 Mac 電腦可以連上一個跳板 10.1.2.3,

而經由此跳板可以連上 172.22.4.5,

我想做的是藉由此跳板連上 172.22.4.5 的 SMB port (445)。

 

先建立一個藉由跳板 10.1.2.3 連通 172.22.4.5 的 ssh tunnel,

這邊我選擇在 Mac 上映射到 30559 這個 port (可以自己選):

ssh -NfL *:30559:172.22.4.5:445 10.1.2.3

 

接著,就可以用 curl 下載 172.22.4.5 上的 SMB 共享檔案。

假設共享檔案的路徑是 \\172.22.4.5\share\file,

帳號密碼分別是 user 和 pass 的話,那就執行下面的指令:

curl smb://user:pass@localhost:30559/share/file -O --retry 9999999 --retry-delay 0 --retry-max-time 0 -C -

 

就能成功把不同網段的 SMB 共享檔案下載回來囉~

在上面的 curl 指令,我還多加了 -C – 來回復 (resume) 上次未完成的下載,

並且加了重試 (retry) 的功能,在網路不穩的情況下很有用喔~

 

參考資料:

Manual — curl usage explained

Persistent retrying resuming downloads with curl

(本頁面已被瀏覽過 1,007 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料