Linux

如何編寫腳本以在啟動時從 USB 驅動器讀取 wifi SSID 和密碼並自動登錄到 wifi 網路

  • May 23, 2013

我有一個執行 Debian 的嵌入式系統。我希望能夠通過 USB 拇指驅動器提供 wifi 網路 SSID 和密碼資訊。這樣我就可以輕鬆地將其部署到任何 wifi 網路。

是否可以在啟動時讓腳本從 USB 驅動器讀取 wifi SSID 和密碼並自動連接到 wifi 網路?有人有腳本可以做到這一點嗎?

有沒有更好的方法來實現這一點?

這是一個使用 Perl 為您執行腳本的想法。您可以將其翻譯成您選擇的語言,甚至可能是 bash。真正重要的是連接到無線的命令。Perl 只是我快速執行此操作的一種手段,您對快速的想法可能會有所不同。如果您不習慣閱讀 Perl,請注意,所有反引號都是 shell 命令。

例如,Gnome 內置了記住您的網路的處理,並且將為登錄使用者執行此操作,但是……我假設一個無頭設置。這很有趣,一個可以自動連接到 wifi 的移動無頭設置。涼爽的。

這假設一個 wpa 網路,並安裝了 iwconfig(我敢打賭,它與您的無線軟體包一起提供)和 wpa_supplicant。

這僅佔 csv 中定義的一個網路。並假設它會在第一次嘗試時起作用。您需要使用所需網路的實際參數來充實它,或添加其他處理。但是,這個通用結構會很快為您完成。

/mnt/usb/network.csv格式為“目標 SSID,密碼”的文件 @ :

myWifiSSID,mypassword

文件@ /home/me/connect.pl(以 chmod 755 為例):

#!/usr/bin/perl
# Set to your device name.
$iface = "wlan0";

# Set to your USB mount point & network definition CSV file.
$networkdefinition = "/mnt/usb/network.csv";

# Get the contents of your file on USB stick.
$line = `cat $networkdefinition`;

# Read the CSV into parts.
@parts = split(/,/,$line);

# Get a list of wireless networks in range.
# And grep that for the network we're looking for.
$foundnetworks = `iwlist $iface scan | grep 'ESSID:"$parts[0]"'`;

# See if this turns up the network we're looking for
if (length($foundnetworks)) {
       # It did. Let's bring up that interface.                    
       `wpa_supplicant -B -i $iface -c <(wpa_passphrase $parts[0] $parts[1])`;
} else { 
       # Network not in range, perform error handling etc.
}

在您的 crontab 中:

@reboot /home/me/connect.pl

注意事項:

  • 需要更好的錯誤處理/更規律的執行方式
  • 需要處理 WPA 以外的其他網路
  • Cron 解決方案假定屆時 mount 將可用。

這是隨著您的進行而擴展的有趣的東西,但是,這可能是一種使用 USB 記憶棒 CSV 文件來指定您的 wifi 網路的快速啟動方式。

真正的核心是這兩個命令:

  • iwconfig
  • wpa_supplicant

其餘的只是關於如何實施您提出的自動連接到 wifi 應用程序的解決方案的真正想法。

引用自:https://unix.stackexchange.com/questions/75819