巧用netcat進(jìn)行網(wǎng)絡(luò)間的Linux克隆
如果您需要裝配一系列有相同配置的Linux計(jì)算機(jī),其中的一個解決方案是使用dd和netcat在網(wǎng)絡(luò)上對服務(wù)器進(jìn)行克隆。
結(jié)合使用netcat和tar
Netcat被稱為Linux上的瑞士軍刀,這意味著可以使用它做很多事情。您可以用netcat在一臺計(jì)算機(jī)上開啟一個端口,并通過那個端口以管道的形式從另一臺計(jì)算機(jī)獲取數(shù)據(jù)。例如,像下面結(jié)合netcat和tar的例子命令所示,您可以輕松地拷貝一個目錄的內(nèi)容。在接收端的計(jì)算機(jī)上,啟動一個netcat監(jiān)聽進(jìn)程。下面的命令告訴netcat監(jiān)聽端口1968,并將從該端口接收的數(shù)據(jù)管道傳送給tar x命令,以便從歸檔文件中解出文件。
netcat -l -p 1968 | tar x
連接的另一端是netcat接收者。在這個例子中,它是一個創(chuàng)建歸檔文件并通過netcat管道傳送給目標(biāo)主機(jī)的命令:
tar c . | netcat 10.0.0.10 1968
這個命令的第一部分對當(dāng)前目錄的內(nèi)容開啟了一個tar歸檔任務(wù),第二部分則將結(jié)果發(fā)送到在主機(jī)10.0.0.10端口1968上監(jiān)聽的netcat。
結(jié)合使用tee和netcat命令實(shí)現(xiàn)組播
您已經(jīng)看到,netcat是將文件從一臺計(jì)算機(jī)傳送到另一臺計(jì)算的一個簡單方法。但這個方法存在一個缺點(diǎn),該命令不支持組播。也就是說您不可以在多臺計(jì)算機(jī)上開啟netcat作為監(jiān)聽者,并讓一臺計(jì)算機(jī)將數(shù)據(jù)發(fā)送到組播端口。但是,您可以使用工作區(qū)并在一個netcat鏈里連接多臺計(jì)算機(jī)。我們假設(shè)有10臺計(jì)算機(jī)。您想要將10.0.0.10上的一些iso文件通過網(wǎng)絡(luò)發(fā)布到IP地址為10.0.0.11到10.0.0.20的主機(jī)上。首先,您需要在所有的計(jì)算機(jī)上準(zhǔn)備一個netcat會話,然后在存有iso文件的計(jì)算機(jī)上執(zhí)行下面的命令:
tar c . | netcat 10.0.0.11 1968
這個命令將歸檔的tar文件發(fā)送到10.0.0.11。這時,在10.0.0.11上需要有一個netcat進(jìn)程來等待傳入的數(shù)據(jù),并從tar管道中解出數(shù)據(jù)。與此同時,如果還需要將數(shù)據(jù)發(fā)送到另一臺計(jì)算機(jī),您可以使用tee命令。使用tee命令,您可以在一個管道的輸出上再執(zhí)行兩個命令。如下面的命令所示:
netcat -l -p 1968 | tee > (tar x) | netcat 10.0.0.12 1968
正如您所看到的,通過tee命令和輸出重定向,數(shù)據(jù)被發(fā)送到tar x以被解出。同時,會發(fā)送數(shù)據(jù)到IP地址為10.0.0.12的計(jì)算機(jī),該計(jì)算機(jī)上必須有一個netcat進(jìn)程在監(jiān)聽端口1968。從而,在那臺計(jì)算機(jī)上,也有一個netcast進(jìn)程在等待傳入的數(shù)據(jù)。
netcat -l -p 1968 | tee (tar x) | netcat 10.0.0.13 1968
在netcat鏈上一直重復(fù)執(zhí)行這個過程,直到最后一臺IP地址為10.0.0.20的計(jì)算機(jī)。在這臺計(jì)算機(jī)上,您只要有netcat監(jiān)聽傳入的數(shù)據(jù)并直接將數(shù)據(jù)發(fā)送到tar進(jìn)程。因此,在10.0.0.20上,執(zhí)行下面的命令進(jìn)行等待:
netcat -l -p 1968 | tar x
您必須從10.0.0.20上的監(jiān)聽器開始,啟動這個類似于序列的組播,然后,在10.0.0.19上輸入命令,并一直往前到10.0.0.10上的netcat發(fā)送者。您會看到文件很快地被拷貝到鏈上的所有機(jī)器里。但是,這只是一個測試。一旦確認(rèn)在您的Linux上有效,您就可以正式進(jìn)行工作,并用這個方法將一個鏡像分發(fā)到多臺計(jì)算機(jī)上。
【編輯推薦】