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

第一步:找到無線接口和無線網絡的名稱

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 網絡

現在安裝 wpa_supplicant 來自默認軟件存儲庫的 Ubuntu 18.04 / 20.04。

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

wpa_passphrase

請注意,在上面的屏幕截圖中,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 桌面,則需要使用以下命令停止 NetworkManager。否則,您在使用時會遇到連接問題。 wpa_supplicant..

sudo systemctl stop NetworkManager

另外,運行以下命令來禁用 NetworkManager 在啟動時的自動啟動。

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

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

iwconfig

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

使用終端命令在 ubuntu 上啟用 wifi

你可以按 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

ubuntudhclient 獲取私有 IP 地址

您現在可以訪問互聯網。要釋放私有 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 地址。這可以通過創建一個 systemd 服務單元來實現 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.service 運行前 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 機器上的服務。 此主機名始終解析為 Ubuntu 機器的 IP 地址,即使 IP 地址發生更改。

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

sudo apt install avahi-daemon

啟動服務。

sudo systemctl start avahi-daemon

啟動時啟用自動啟動。

sudo systemctl enable avahi-daemon

Avahi 守護程序偵聽 UDP5353,因此您需要在防火牆中打開此端口。 如果您使用的是 UFW,請運行以下命令:

sudo ufw allow 5353/udp

接下來,您需要為您的 Ubuntu 機器設置一個唯一的主機名 hostnamectl 命令。 將 ubuntubox 替換為本地網絡中其他設備未使用的首選主機名。

sudo hostnamectl set-hostname ubuntubox

現在重新啟動 avahi-daemon。

sudo systemctl restart avahi-daemon

如果您檢查狀態

systemctl status avahi-daemon

mDNS 主機名顯示如下。 .local 場地。

avahi-daemonmdns 主機名

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

  • Linux用戶需要安裝 avahi-daemon..
  • Windows 用戶必須安裝 Bonjour 打印服務或安裝 iTunes 才能啟用 Bonjour 服務。
  • Bonjour 預裝在 macOS 上。

現在你可以使用 ubuntubox.local 主機名。 您無需確認和輸入 IP 地址。

在樹莓派上解鎖 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。如果您安裝了桌面環境,請注意可能有正在運行的網絡管理器阻止連接。必須禁用。例如,我在 Raspberry Pi 上使用輕量級 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 網絡添加到文件中,而不是刪除原始的 Wifi 網絡。

無線網絡安全

不使用 WPA2 TKIPWPA2 TKIP + AES 作為 Wi-Fi 路由器的加密方法。 TKIP 不再被認為是安全的。你可以使用它 WPA2-AES 作為一種加密方式。

包起來

我們希望本教程將幫助您使用 WPA 請求者從命令行將 Ubuntu 18.04 / 20.04 連接到您的 Wi-Fi 網絡。與往常一樣,如果您覺得本文有用,請訂閱我們的免費新聞通訊以獲取更多提示和技巧。