使用 WPA Supplicant 從 Ubuntu 18.04/20.04 上的終端連接到 Wi-Fi


 

  在本教程中,我們將學習如何在 Ubuntu 18.04/20.04 服務器和桌面上使用wpa_supplicant從命令行連接到 Wi-Fi 網絡。在現代家庭無線網絡中,通信受 WPA-PSK(預共享密鑰)保護,而不是為企業網絡設計的 WPA-Enterprise。WPA-PSK 也稱為 WPA-個人。 wpa_supplicant是 WPA 請求者組件的實現。無線局域網中的請求者是安裝在最終用戶計算機上的客戶端軟件,需要對其進行身份驗證才能加入網絡。

 

步驟 1:查找您的無線接口和無線網絡的名稱

運行iwconfig命令以查找您的無線接口的名稱 :

iwconfig

 

wlan0曾經是沒有 Systemd 的 Linux 系統上無線網絡接口的通用名稱。因為 Ubuntu 使用 Systemd,你會發現你的無線網絡接口被命名為類似wlp4s0. 您還可以看到它現在沒有與任何接入點相關聯。

如果您的無線接口未顯示,也許您需要使用以下命令啟動它。

sudo ifconfig wlp4s0 up

 

然后通過使用以下命令掃描附近的網絡來查找您的無線網絡名稱。替換wlp4s0為您自己的無線接口名稱。ESSID 是網絡名稱標識符。

sudo iwlist wlp4s0 scan | grep ESSID

 

 

 

第 2 步:使用 WPA_Supplicant 連接到 Wi-Fi 網絡

現在 Ubuntu 18.04/20.04 上從默認軟件存儲庫安裝wpa_supplicant。

sudo apt install wpasupplicant

 

我們需要創建一個wpa_supplicant.conf使用該wpa_passphrase實用程序命名的文件 。 wpa_supplicant.conf是描述用戶希望計算機連接到的所有網絡的配置文件。運行以下命令來創建此文件。將 ESSID 和 Wi-Fi 密碼替換為您自己的密碼。

wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee /etc/wpa_supplicant.conf

 

請注意,在上面的屏幕截圖中,我用雙引號將 ESSID 括起來,因為我的 ESSID 包含空格。

wpa_passphrase命令的輸出將通過管道傳輸到tee,然后寫入/etc/wpa_supplicant.conf文件。現在使用以下命令將您的無線網卡連接到無線接入點。

sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp4s0

 

以下輸出表明您的無線網卡已成功連接到接入點:

Successfully initialized wpa_supplicant wlp4s0: SME: Trying to authenticate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz) wlp4s0: Trying to associate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz) wlp4s0: Associated with c5:4a:21:53:ac:eb wlp4s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0 wlp4s0: WPA: Key negotiation completed with c5:4a:21:53:ac:eb [PTK=CCMP GTK=CCMP] wlp4s0: CTRL-EVENT-CONNECTED - Connection to c5:4a:21:53:ac:eb completed [id=0 id_str=]

 

請注意,如果您使用的是 Ubuntu 桌面版,那么您需要使用以下命令停止網絡管理器,否則在使用wpa_supplicant時會導致連接問題。

sudo systemctl stop NetworkManager

 

並通過執行以下命令在啟動時禁用 NetworkManager 自動啟動。

sudo systemctl disable NetworkManager-wait-online NetworkManager-dispatcher NetworkManager

 

默認情況下,wpa_supplicant 在前台運行。如果連接完成,則打開另一個終端窗口並運行

iwconfig

 

您可以看到無線接口現在與接入點相關聯。

您可以按CTRL+C停止當前的wpa_supplicant進程並通過添加-B標志在后台運行它。

sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp4s0

 

盡管我們已通過身份驗證並連接到無線網絡,但我們還沒有 IP 地址。要從 DHCP 服務器獲取私有 IP 地址,請使用以下命令:

sudo dhclient wlp4s0

 

現在您的無線接口有一個私有 IP 地址,它可以顯示為:

ip addr show wlp4s0

 

現在您可以訪問 Internet。要釋放私有 IP 地址,請運行

sudo dhclient wlp4s0 -r

 

連接到隱藏的無線網絡

如果您的無線路由器不廣播 ESSID,那么您需要在/etc/wpa_supplicant.conf文件中添加以下行。

scan_ssid=1

 

像下面這樣:

network={ ssid="LinuxBabe.Com Network"
        #psk="12345qwert" psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195 scan_ssid=1 }

 

第 3 步:啟動時自動連接

要在啟動時自動連接到無線網絡,我們需要編輯該wpa_supplicant.service文件。最好將文件從一個/lib/systemd/system/目錄復制到另一個/etc/systemd/system/目錄,然后編輯文件內容,因為我們不希望更新的版本wpa_supplicant覆蓋我們的修改。

sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service

 

使用命令行文本編輯器(例如 Nano)編輯文件。

sudo nano /etc/systemd/system/wpa_supplicant.service

 

找到以下行。

ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

 

將其更改為以下內容。這里我們在ExecStart命令中添加了配置文件和無線接口名稱。

ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp4s0

 

建議在檢測到故障時始終嘗試重新啟動 wpa_supplicant。在該ExecStart行下方添加以下內容。

Restart=always

 

如果您可以在此文件中找到以下行,請將其注釋掉(在該行的開頭添加 # 字符)。

Alias=dbus-fi.w1.wpa_supplicant1.service

 

保存並關閉文件。(要在 Nano 文本編輯器中保存文件,請按Ctrl+O,然后按Enter確認。要退出,請按Ctrl+X。)然后重新加載 systemd。

sudo systemctl daemon-reload

 

啟用wpa_supplicant服務以在啟動時啟動。

sudo systemctl enable wpa_supplicant.service

 

我們還需要在啟動dhclient時啟動以從 DHCP 服務器獲取私有 IP 地址。這可以通過為dhclient.

sudo nano /etc/systemd/system/dhclient.service

 

將以下文本放入文件中。

[Unit] Description= DHCP Client Before=network.target After=wpa_supplicant.service [Service] Type=forking ExecStart=/sbin/dhclient wlp4s0 -v ExecStop=/sbin/dhclient wlp4s0 -r Restart=always [Install] WantedBy=multi-user.target

 

保存並關閉文件。然后啟用此服務。

sudo systemctl enable dhclient.service

 

如何獲取靜態 IP 地址

如果要獲取靜態 IP 地址,則需要禁用dhclient.service.

sudo systemctl disable dhclient.service

 

我們需要在 Ubuntu 18.04/20.04 上使用 netplan 配置靜態 IP 地址。下創建配置文件/etc/netplan/。

sudo nano /etc/netplan/10-wifi.yaml

 

將以下行添加到此文件中。替換192.168.0.102為您首選的 IP 地址。請注意縮進。額外的空間會使配置無效。

network: ethernets: wlp4s0: dhcp4: no addresses: [192.168.0.102/24] gateway4: 192.168.0.1 version: 2

 

保存並關閉文件。然后應用配置。

sudo netplan apply

 

--debug如果它沒有按預期工作,您也可以打開該選項。

sudo netplan --debug apply

 

如果.yaml目錄下還有其他文件/etc/netplan/,那么netplan會自動合並不同文件的配置。netplan使用systemd-networkd作為后端網絡渲染。建議先配置wpa_supplicant.servicerun systemd-networkd.service,系統會先關聯一個Wi-Fi接入點,然后獲取私有IP地址。

sudo nano /etc/systemd/system/wpa_supplicant.service

 

找到以下行。

Before=network.target

 

將其更改為:

Before=network.target systemd-networkd.service

 

保存並關閉文件。

獲取靜態 IP 地址的另一種方法是登錄路由器的管理界面並為無線網卡的 MAC 地址分配一個靜態 IP(如果您的路由器支持此功能)。

 

在 Ubuntu 上使用主機名訪問服務

實際上,您不必為您的 Ubuntu 機器獲取靜態 IP 地址。Ubuntu 可以使用 mDNS(多播 DNS)向本地網絡宣布其主機名,客戶端可以使用該主機名訪問 Ubuntu 機器上的服務。即使 IP 地址更改,此主機名始終可以解析為 Ubuntu 機器的 IP 地址。

為了使用 mDNS,您需要安裝 avahi-daemon,它是 mDNS/DNS-SD 的開源實現。

sudo apt install avahi-daemon

 

啟動服務。

sudo systemctl start avahi-daemon

 

在啟動時啟用自動啟動。

sudo systemctl enable avahi-daemon

 

Avahi-daemon 監聽 UDP 5353,所以需要在防火牆中打開這個端口。如果您使用 UFW,則運行以下命令。

sudo ufw allow 5353/udp

 

然后你應該使用hostnamectl命令為你的 Ubuntu 機器設置一個唯一的主機名。將 ubuntubox 替換為您首選的主機名,本地網絡中的其他設備不應使用該主機名。

sudo hostnamectl set-hostname ubuntubox

 

現在重新啟動 avahi-daemon。

sudo systemctl restart avahi-daemon

 

如果您檢查狀態

systemctl status avahi-daemon

 

您可以看到以.local域結尾的 mDNS 主機名。

在客戶端計算機上,您還需要安裝 mDNS/DNS-SD 軟件。

  • Linux 用戶應該安裝avahi-daemon.
  • Windows 用戶需要通過安裝Bonjour 打印服務或安裝iTunes來啟用 Bonjour 服務。
  • 在 macOS 上,預裝了 Bonjour。

現在您可以使用ubuntubox.local主機名訪問服務,無需檢查和鍵入 IP 地址。

 

 

在 Raspberry Pi 上解鎖 Wifi

用於 Raspberry Pi 的 Ubuntu ARM 操作系統默認阻止無線接口。您需要使用以下命令解除阻止:

sudo rfkill unblock wifi

 

要在啟動時解鎖它,請創建一個 systemd 服務單元。

sudo nano /etc/systemd/system/unblock-wifi.service

 

向其中添加以下幾行。

[Unit] Description=RFKill Unblock WiFi Devices Requires=wpa_supplicant.service After=wpa_supplicant.service [Service] Type=oneshot ExecStart=/usr/sbin/rfkill unblock wifi ExecStop= RemainAfterExit=yes [Install] WantedBy=multi-user.target

 

保存並關閉文件。在啟動時啟用自動啟動。

sudo systemctl enable unblock-wifi

 

我發現unblock-wifi.service應該在wpa_supplicant.service啟動后運行,否則無法解鎖wifi。請注意,如果您安裝了桌面環境,則可能正在運行的網絡管理器會干擾連接。你需要禁用它。比如我在樹莓派上使用輕量級的LXQT桌面環境(sudo apt install lubuntu-desktop),需要禁用connman.service和NetworkManager.service。

sudo systemctl disable connman.service NetworkManager.service

 

 

 

多個 Wi-Fi 網絡

該/etc/wpa_supplicant.conf配置文件可以包含多個Wi-Fi網絡。wpa_supplicant 將根據配置文件中網絡塊的順序、網絡安全級別和信號強度自動選擇最佳網絡。

要添加第二個 Wi-Fi 網絡,請運行

wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee -a /etc/wpa_supplicant.conf

 

請注意,您需要將-a選項與tee命令一起使用,該選項會將新的 Wifi 網絡附加到文件中,而不是刪除原始內容。

 

無線網絡安全

請勿在 Wi-Fi 路由器中使用WPA2 TKIPWPA2 TKIP+AES作為加密方法。TKIP 不再被認為是安全的。您可以使用WPA2-AES作為加密方法。

 

 

轉載自:https://www.linuxbabe.com/ubuntu/connect-to-wi-fi-from-terminal-on-ubuntu-18-04-19-04-with-wpa-supplicant

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM