電腦教室裡有幾十部電腦, 想要把一個大檔一次同步派送給所有電腦,
可以用 udpcast;
那如果想要一次同步指揮所有電腦呢? 就用 netcat!
gtwang 的 netcat 教學文 很詳細; 對我們來說只需要讀到
「在兩台主機之間複製檔案」 那一節就夠了。
不同版本的 netcat 有一些大同小異, 例如有一些版本在作為接受端時,
必須在 port 前面加上 -p 。 另外, 加上 -v 比較容易除錯。
例如我們任選 port 5284 好了, 最後的測試指令長這樣:
接收端 (某部學生機) 執行: nc -vlp 5284 | bash
發送端 (老師機) 執行: nc 學生機的IP 5284
然後在老師機開始 「盲下指令」 (因為看不到回應, 只能跑到學生機去確認):
set -x pwd ls df
最後按 ctrl-C 終止。 很方便也很可怕, 對吧? 做完實驗馬上要確認接收端已經停止接收, 不然很危險! 如果你沒有躲在 NAT 後面, 不限區網, 任何人都可以進來惡搞你的電腦。 註: set -x 的目的是增加學生機看見的訊息, 方便除錯。
以上是一部學生機。 那如果是三十部或五十部學生機呢? 加上 -b -u 可以改採 udp 方式廣播, 可是好像很不穩, 當然, 因為是 udp 嘛。
所以我就寫了一個小程式 mcnc.py (multicast netcat 的意思) 用迴圈逐一對每一部機器做 (原本預設的) tcp 方式 netcat。 首先必須建立一個文字檔, 叫做 nchosts.txt 好了, 內容就是每列一個 host 的 IP:
192.168.3.32 192.168.3.33 ... 192.168.3.63
再來請在每一部學生機執行 nc -vlp 5284 | bash
最後假設老師機的 IP 是 192.168.3.1 而且假設它已啟動 apache2 網頁伺服器。
那就可以 python3 mcnc.py -p 5284 -r nchosts.txt
並且在 mcnc 的提示符號下逐列執行以下指令:
set -x ls export MAC=$(cat /sys/class/net/eth0/address) export IPADDR=$(ip r | perl -ne 'print "$1\n" if / eth0 .*\s((\d+\.){3}\d+)/') wget 192.168.3.1/?MAC=$MAC+IPADDR=$IPADDR -O /dev/null
看著教室裡所有的學生機同步動作,
突然覺得自己好像是複製人軍團的指揮官 (嘴角露出邪惡的微笑~)
這裡先叫每一部學生機
從 /sys/class/net/eth0/address 查詢自己的 mac address,
再查詢自己的 IP 位址, 最後去造訪老師機的網頁。
老師機的網頁其實沒什麼好看的,
主要目的是要讓每一部學生機在造訪網頁時順便透過 query string
(問號後面那一串) 把自己的資訊傳給老師機,
因為老師事後可以到 /var/log/apache2/access.log
抓出這些記錄, 然後就可以製作
「本教室所有 ip address / mac address 對照表」
以便餵給 dhcp 伺服器未來派送固定的 IP。
[9/10 謝謝 Typebrook 分享, 其實只需要在老師機 (或任何一部學生機)
下 nmap -sP 192.168.3.0/24
即可,
請參考 這篇簡中。
但是我還需要走到每一部學生機前面, 把座位與 IP 的對應關係也記下來,
所以就需要用 mcnc.py 。]
以上查 IP 與 MAC 只是一個示範;
基本上可以下指令, 就什麼都可以做了。
例如想要幫笨笨的 windows 做一些每部機器的 (有規律)
客製化設定, 也可以請 linux 幫忙。
當然,做的時候最好把教師對外的網路線拔掉,
以免黑帽駭客趁電腦門戶大開時入侵。
我只在兩部虛擬學生機測試過, 還有兩部伺服器暫時扮演學生機 (很危險,不要學)
[9/9 已在35部學生機的電腦教室成功測試時沒問題。]
原來指揮電腦軍團同步執行指令並沒有很困難,
為什麼以前從來沒有人告訴我啊?
我超想到各地的去把這招分享給電腦老師們!
[9/10 謝謝 Tasuka 分享, 原來有早就有 dsh 這個好用的東東可以拿來遙控大量電腦, 請參考 中文教學文 或 英文教學文 ]
用 dsh "danser's shell" 好像也很方便
回覆刪除真有趣,最近我才知道可以用tmux server 讓不同使用者觀看同一個指令行操作
回覆刪除老師介紹的這個netcat則是做相反的事。
另外,若要檢查目前網路中各個host的IP和Mac address,應該可以直接下指令:
nmap / -sP
也可以使用 Ansible 工具對遠端10幾台或上百台機器進行自動化部屬工作。
回覆刪除