使用WPA_Supplicant从Ubuntu 16.04服务器上的终端连接到WPA2 Wi-fi
在本教程中,我们将学习如何使用wpa_supplicant从Ubuntu 16.04服务器和台式机上的命令行连接到Wi-fi网络。
在现代家庭无线网络中,通信是通过WPA-PSK(预共享密钥)保护的,而不是为企业网络设计的WPA-Enterprise。 WPA-PSK也称为WPA-个人。 wpa_supplicant 是WPA请求方组件的实现。 无线局域网中的请求者是安装在最终用户计算机上的客户端软件,需要进行身份验证才能加入网络。
现在,让我们看看如何使用wpa_supplicant连接到WPA2无线网络。
步骤1:启用无线接口
首先,请确保您的无线卡已启用。 您可以使用 rfkill。
sudo apt install rfkill
要检查无线网卡的状态,请运行
rfkill list
样本输出:
如您所见,我的无线网卡已被软件阻止。 要解除阻止,请使用以下命令:
rfkill unblock wifi
如果使用的是桌面版Ubuntu,则还需要使用以下命令停止网络管理器,否则在使用wpa_supplicant时会导致连接问题。
sudo systemctl stop NetworkManager
您还需要通过执行以下命令来禁用NeworkManager在启动时启动。
sudo systemctl disable NetworkManager
步骤2:查找您的无线接口名称和无线网络名称
跑 iwconfig
查找您的无线接口的名称。
iwconfig
wlan0
是一个通用名称,但我的无线接口称为 wlp3s0
。 您还可以看到它现在不与任何接入点关联。
如果未显示您的无线接口,则可能需要使用以下命令启动它。
sudo ifconfig wlp3s0 up
然后使用以下命令扫描附近的网络,找到您的无线网络名称。 用您自己的接口名称替换wlp3s0。 ESSID表示网络名称。
sudo iwlist wlp3s0 scan | grep ESSID
步骤3:使用wpa_supplicant连接到Wi-fi网络
现在在Ubuntu 16.04上安装wpa_supplicant。
sudo apt install wpasupplicant
我们需要创建一个名为 wpa_supplicant.conf
使用 wpa_passphrase
效用。 wpa_supplicant.conf
是配置文件,描述用户希望计算机连接到的所有网络。 运行以下命令来创建此文件。 用您自己的替换ESSID和Wi-fi密码。
wpa_passphrase your-ESSID your-passphrase | sudo tee /etc/wpa_supplicant.conf
请注意,在上面的屏幕截图中,我的ESSID用双引号引起来,因为我的ESSID包含空格。
输出将通过管道传输到 tee
然后写到 /etc/wpa_supplicant.conf
文件。 现在,使用以下命令将您的无线网卡连接到无线访问点。
sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp3s0
默认情况下,wpa_supplicant在前台运行。 如果连接完成,则打开另一个终端窗口并运行
iwconfig
您可以看到无线接口现在已与访问点关联。
你可以按 CTRL+C
停止当前的wpa_supplicant进程并通过添加在后台运行它 -B
选项。
sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp3s0
尽管我们已通过身份验证并已连接到无线网络,但是我们还没有IP地址。 要从DHCP服务器获取私有IP地址,请使用以下命令:
sudo dhclient wlp3s0
现在,您的无线接口具有一个专用IP地址,该地址可以显示为:
ifconfig wlp3s0
现在您可以访问Internet。 要释放私有IP地址,请运行
sudo dhclient wlp3s0 -r
连接到隐藏的无线网络
如果您的无线设备不广播SSID,则需要在其中添加以下行 /etc/wpa_supplicant.conf
文件。
scan_ssid=1
如下所示:
network={ ssid="LinuxBabe.Com office network" #psk="12345qwert" psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195 scan_ssid=1 }
启动时自动连接
要在启动时自动连接到无线网络,我们需要编辑 wpa_supplicant.service
文件。 从以下位置复制文件是个好主意 /lib/systemd/system/
目录到 /etc/systemd/system/
目录,然后进行编辑,因为我们不需要更新版本的 wpasupplicant
覆盖我们的修改。
sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service sudo nano /etc/systemd/system/wpa_supplicant.service
找到以下行。
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
将其更改为以下内容。 显然你需要改变 wlp3s0
如果不是您的界面名称。
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp3s0
建议在检测到故障时始终尝试重新启动wpa_supplicant。 在下面添加以下内容 ExecStart
线。
Restart=always
如果可以在此文件中找到以下行,请将其注释掉(在该行的开头添加#字符)。
Alias=dbus-fi.w1.wpa_supplicant1.service
保存并关闭文件。 然后启用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 [Service] Type=forking ExecStart=/sbin/dhclient wlp3s0 -v ExecStop=/sbin/dhclient wlp3s0 -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 "wlp3s0" { 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
域。
在客户端计算机上,您还需要安装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
要在启动时解除阻止,请编辑 wpa_supplicant.service
系统单位。
sudo nano /etc/systemd/system/wpa_supplicant.service
将ExecStart参数更改为以下内容。
ExecStart=/bin/bash -c '/usr/sbin/rfkill unblock wifi && /sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlan0'
保存并关闭文件。
如果这样不起作用,您可以掩盖 systemd-rfkill.socket
系统单位。
sudo systemctl mask systemd-rfkill.socket
另外,创建 rc.local
文件。
sudo nano /etc/rc.local
在此文件中添加以下行。
#!/bin/bash /usr/sbin/rfkill unblock wifi exit 0
使它可执行。
sudo chmod +x /etc/rc.local
在我的测试中 rfkill unblock
systemd单元中的命令无效,但在 /etc/rc.local
文件。 时机也许很重要。 可能是 rfkill unblock
命令应在 wpa_supplicant
命令。
请注意,如果您已经安装了桌面环境,则可能是网络管理器正在运行,这可能会干扰连接。 您需要禁用它。 例如,我在Raspberry Pi上使用轻量级的LXQT桌面环境,并且需要禁用connman.service。
sudo systemctl disable connman.service
包起来
我希望本教程可以帮助您从命令行设置Ubuntu服务器16.04 wifi。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。 您也可以在Google +,Twitter或喜欢我们的Facebook页面上关注我们。