最近一段時(shí)間比較忙叹螟,鮮有時(shí)間嘗試一些新的台盯、有趣的東西,寫的東西也少了静盅。今天抽空給大家介紹一款點(diǎn)對(duì)點(diǎn)文件分享工具croc。
croc
is a tool that allows any two computers to simply and securely transfer files and folders. AFAIK, croc is the only CLI file-transfer tool that does all of the following:
- allows any two computers to transfer data (using a relay)
- provides end-to-end encryption (using PAKE)
- enables easy cross-platform transfers (Windows, Linux, Mac)
- allows multiple file transfers
- allows resuming transfers that are interrupted
- local server or port-forwarding not needed
- ipv6-first with ipv4 fallback
- can use proxy, like tor
For more information about
croc
, see my blog post.
上面是來自作者對(duì)這款工具的簡(jiǎn)單介紹棚壁,感興趣的小伙伴可以到官方倉(cāng)庫schollz/croc了解工具詳情和安裝方法栈虚。
本篇博文我們主要聊一下croc工具使用時(shí)一些有意思,值得關(guān)注的小細(xì)節(jié)曼验。
1. 建立自己的中間媒介
首先粘姜,croc依賴一個(gè)中間媒介,A用戶通過該媒介將文件傳給B用戶孤紧,默認(rèn)情況下croc使用作者自建的服務(wù)器作為中間媒介。
出于安全考慮用戶可以使用自有服務(wù)器自建媒介臭猜,命令如下:
# on your server, after croc installed
croc relay
默認(rèn)情況下押蚤,上述命令啟動(dòng)的croc媒介服務(wù)監(jiān)聽9009-9013
端口,所以如果使用默認(rèn)端口的話揽碘,請(qǐng)務(wù)必向防火墻添加端口9009-9013
的入站規(guī)則。
croc
允許用戶在建立私有媒介時(shí)使用自定義端口雳刺,命令如下:
# on your server, after croc installed
croc relay --ports 10010,10011,10012,10013
上述命令要求croc
使用10010-10013
等4個(gè)端口提供文件共享服務(wù)掖桦,相應(yīng)地注意修改防火墻規(guī)則。
2. 使用docker/kubernetes容器服務(wù)
作者制作了docker鏡像方便將croc容器化滞详,鏡像地址:schollz/croc
使用docker或者kubernetes時(shí)請(qǐng)務(wù)必保證端口映射后紊馏,服務(wù)在主機(jī)上的監(jiān)聽地址與服務(wù)在容器中的監(jiān)聽地址相同蒲犬。
例如:
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc
部署的服務(wù)可以外部使用,而
docker run -d -p 8009-8013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc
部署的服務(wù)外部不能使用赫编。
主要是因?yàn)橛脩艉蚦roc媒介交互的時(shí)候,croc服務(wù)會(huì)將自己監(jiān)聽的端口(即上述命令中的9009-9013
)告訴用戶端擂送,用戶端將嘗試使用被告知的端口和croc服務(wù)通信唯欣,但實(shí)際上工作在容器下層的服務(wù)器監(jiān)聽在8009-8013
,這和用戶端被告知的情況不一致境氢,所以用戶端將不能和croc服務(wù)正常通信。
使用kubernetes時(shí)问芬,同樣需要注意這個(gè)問題寿桨,服務(wù)所曝露在服務(wù)器上的真實(shí)端口一定要和pod/croc監(jiān)聽的端口保持一致,至于中間的ingress-nginx --> service/croc --> pod/croc 之間采用什么端口并不重要亭螟,只要能保證用戶訪問服務(wù)器指定端口能最終連通到pod/croc的同一端口上即可。
說得有一點(diǎn)繞匕累,舉個(gè)栗子吧:假設(shè)你的pod/croc 監(jiān)聽在9009-9013
端口默伍,由于pod/croc上層還有service/croc衰琐,而service/croc上層有ingress-nginx,假設(shè)你的服務(wù)是通過ingress-nginx以nodeport的形式曝露到機(jī)器端口上羡宙,那么ingress-nginx曝露的端口應(yīng)為9009-9013
,只有這樣用戶在和croc通信時(shí)才能保證用戶得到的信息和服務(wù)器端運(yùn)行的信息一致钞馁,保證正常通信。
3. 簡(jiǎn)化使用流程
自建croc中繼的話僧凰,用戶在分享文件時(shí)需要指明中繼服務(wù)器的ip和croc服務(wù)監(jiān)聽的端口,如
croc --relay "yourserverip:port" --pass yourpassword send /path/to/somfile
每次都這樣操作略顯繁瑣伪节,可以在某次命令中使用--remember
參數(shù)绩鸣,將這種常用的參數(shù)保存到配置文件$HOME/.config/croc/send.json
中,如此一來后續(xù)使用時(shí)就不需要每次都手動(dòng)指定 --relay
和--pass
參數(shù)呀闻。
使用自建的croc中間媒介,接受文件時(shí)也需要手動(dòng)指定--relay
和-pass
參數(shù)屏鳍,如下:
croc --relay "yourserverip:port" --pass yourpassword thesharecode
類似地局服,可以在某次接受文件時(shí)使用--remember
將這些常用的參數(shù)固化到$HOME/.config/receive.json
,此后從同一個(gè)中間媒介接受文件時(shí)可不指定--relay
和--pass
淫奔。
注意:接受文件時(shí)使用--remember
會(huì)將sharecode一次存儲(chǔ)到$HOME/.config/receive.json
,建議編輯該文件刪除sharecode對(duì)應(yīng)行配置.
更多內(nèi)容鸭丛,請(qǐng)參考官方說明文檔唐责。
croc僅是一個(gè)簡(jiǎn)易的文件分享工具鳞溉,存在一些安全風(fēng)險(xiǎn)鼠哥,比如:接受文件的用戶必須知道--pass
才能接受文件,而任何知道--pass
的用戶都能利用該口令來使用你部署的croc服務(wù)抄罕,這并不是理想的使用場(chǎng)景于颖。