【Linux學習筆記】用nc實現兩台主機間的文件傳輸(不需要輸密碼)
通常,可以用scp完成兩台主機間的文件傳輸任務,但在主機間未建立信任關系的情況下,scp每次都需要輸入密碼,用起來感覺不是很方便,之前這篇筆記http://www.2cto.com/os/201306/216188.html介紹過不用輸入密碼執行腳本或傳輸文件的方法,但對於一些臨時性的任務,准備工作還是比較麻煩。
本筆記介紹一種簡單的不用密碼即可實現兩台主機間的文件傳輸的技巧—借助Linux的nc工具,方便之處:1) Linux系統通常默認安裝nc工具,不需額外安裝;2) 傳輸文件時不需輸入密碼。不足之處:需要在兩台機器上分別輸入一條命令。^_^
1. what is nc ?
nc是netcat的簡寫,關於nc是什麼,man如是說:arbitrary TCP and UDP connections and listens
nc可以方便地實現任意TCP/UDP端口的偵聽,連接的建立,端口的掃描,等等。也即,nc既可以作為server以TCP或UDP方式偵聽指定端口,也可以作為client發起TCP連接或方式UDP包。下面要介紹的技巧就是借助其TCP連接來實現主機間文件傳輸的。
nc的控制參數不少,常用的幾個參數如下所列:
1) -l
用於指定nc將處於偵聽模式。指定該參數,則意味著nc被當作server,偵聽並接受連接,而非向其它地址發起連接。
2) -p <port>
指定nc要使用的端口。若之前已指定-l,則這裡的-p指定具體的偵聽端口;若未指定-l,則表示向這個端口發起連接。
備注:nc要連接的目的端口可以是具體的整數,也可以直接通過服務名指定,這種情況下,nc會負責將name映射至某個well-known port(可用cat /etc/services查看這些端口跟服務名的映射關系)
3) -s <hostname/ip-address>
指定發送數據的源IP地址,適用於多網卡機器
4) -u
指定nc使用UDP協議,默認為TCP
5) -v
輸出交互或出錯信息,新手調試時尤為有用
2. use nc to transmit data between hosts
經過上面對nc的簡介,估計不少同學已經知道怎麼用nc來實現兩台機器間的文件傳輸了。這裡對實現流程做簡單說明。
1)在數據接收方的機器上偵聽指定端口
[plain]
nc -l -p 8210 > demo.txt # 在本機8210端口偵聽TCP連接,將收到的數據寫入文本文件
nc -l -p 8210 > demo.tar.bz2 # 在本機8210端口偵聽TCP連接,將收到的數據寫成壓縮文件
2)在數據發送方機器上向指定地址(ip+port)以TCP方式發送數據
[plain]
nc dest_ip 8210 < demo.txt # 向ip為dest_ip的機器的8210端口發送demo.txt文件
nc dest_ip 8210 < $(tar -jcvf demo.tar.bz2 demo.txt) # 壓縮後發送
3)-v打印出錯信息
接收方:nc -v -l -p 8210
發送方:nc -v dest_ip 8210
注意:使用nc傳文件時,需注意操作次序,receiver先偵聽端口,sender向receiver所在機器的該端口發送數據。否則發送失敗。
=============== EOF ===============