ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

使用 WPA Supplicant 从 Ubuntu 18.04/20.04 上的终端连接到 Wi-Fi

2021-07-17 18:03:19  阅读:290  来源: 互联网

标签:service 18.04 Supplicant sudo Wi etc wlp4s0 supplicant wpa


 

  在本教程中,我们将学习如何在 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

 

标签:service,18.04,Supplicant,sudo,Wi,etc,wlp4s0,supplicant,wpa
来源: https://www.cnblogs.com/bluebeecoder/p/15024181.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有