使用WPA请求者从Ubuntu 18.04 / 19.10上的终端连接到Wi-Fi

在本教程中,我们将学习如何在Ubuntu 18.04 / 20.04服务器和台式机上使用命令行从命令行连接到Wi-Fi网络。 wpa_supplicant。 在现代家庭无线网络中,通信是通过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

ubuntu 19.04连接到wifi命令行wpa请求者

步骤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桌面版,则需要使用以下命令停止Network Manager,否则在使用时会导致连接问题 wpa_supplicant

sudo systemctl stop NetworkManager

通过执行以下命令,在启动时禁用NeworkManager自动启动。

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

ubuntu dhclient获取私有IP地址

现在您可以访问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。)然后启用 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地址

编辑dhclient配置文件。

sudo nano /etc/dhcp/dhclient.conf

在文件中添加以下行。 用您喜欢的IP地址替换IP地址。 这使dhclient从路由器请求一个静态IP地址。

interface "wlp4s0" {
     send dhcp-requested-address 192.168.0.122;
}

保存并关闭文件。 然后重新启动dhclient服务。

sudo systemctl restart dhclient

我发现这仅在第一次或Ubuntu系统启动时才有效。 也许是因为我的路由器设置。 如果您运行 /sbin/dhclient wlp4s0 如果命令多次(通过dhclient服务),则路由器可能会拒绝dhclient的请求。 还要注意,iOS的热点不支持客户端请求特定的IP地址。

如果您的路由器支持此功能,那么确保Ubuntu系统具有静态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 命令。 用您首选的主机名替换ubuntubox,本地网络中的其他设备不应使用该主机名。

sudo hostnamectl set-hostname ubuntubox

现在重新启动avahi-daemon。

sudo systemctl restart avahi-daemon

如果您通过查看状态

systemctl status avahi-daemon

您会看到mDNS主机名,该主机名以 .local 域。

avahi-daemon mdns主机名

在客户端计算机上,您还需要安装mDNS / DNS-SD软件。

  • Linux用户应安装 avahi-daemon
  • Windows用户需要通过安装Bonjour打印服务或安装iTunes来启用Bonjour服务。
  • 在macOS上,已预装Bonjour。

现在,您可以使用 ubuntubox.local 主机名,无需检查和键入IP地址。

在Raspberry Pi上取消阻止Wifi

默认情况下,用于Raspberry Pi的Ubuntu ARM OS会阻止无线接口。 您需要使用以下方法解除阻止:

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桌面环境,并且需要禁用connman.service。

sudo systemctl disable connman.service

包起来

我希望本教程可以帮助您从命令行使用WPA Supplicant将Ubuntu 18.04 / 20.04连接到Wi-Fi网络。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻简报以获取更多提示和技巧。

Sidebar