如何使用命令行连接到WPA wifi网络?


Answers:


113

iw (列表/配置)只能处理WEP。

您需要wpasupplicant提供wpa_supplicant命令的软件包,必要时通过安装sudo apt-get install wpasupplicant

您将您的SSID和密码放入/etc/wpa_supplicant.conf(需要sudo)。

例:

network={
    ssid="ssid_name"
    psk="password"
}

假设您的接口是wlan0,则可以连接:

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf -D wext
sudo dhclient wlan0

“ wext”是一个驱动程序,将特定于每个卡;请参阅wpa_supplicant -h。例子:

hostap (default) Host AP driver (Intersil Prism2/2.5/3). (this can also be used with Linuxant DriverLoader).
hermes Agere Systems Inc. driver (Hermes-I/Hermes-II).
madwifi MADWIFI 802.11 support (Atheros, etc.).
atmel ATMEL AT76C5XXx (USB, PCMCIA).
wext Linux wireless extensions (generic).
ndiswrapper Linux ndiswrapper.
broadcom Broadcom wl.o driver.
ipw Intel ipw2100/2200 driver.
wired wpa_supplicant wired Ethernet driver
roboswitch wpa_supplicant Broadcom switch driver
bsd BSD 802.11 support (Atheros, etc.).
ndis Windows NDIS driver.

很好,iwlist / iwconfig只能处理WEP,但在我的情况下wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && dhclient wlan0 没有连接到无线网络,尽管默认情况下NetworkManager将我连接到网络,但我想尝试命令行方式,这是我做的一些错误吗?
注册用户

最后一个命令实际上是两个命令,您都需要以root(系统管理员)身份运行。因此,sudo wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && sudo dhclient wlan0 或将它们分为两个命令&&
2014年

此解决方案给我错误“ wlan0:不支持的驱动程序'ext'”。
塞林2015年

1
@Rinzwind,是的。。。浏览wpa_supplicant的联机帮助页时,显示驱动程序可能会有所不同,因此您的命令可能无法按原义给出。您必须为特定的硬件选择-D <驱动程序>。对我来说,它最终是“ nl80211”。
塞林2015年

1
我只是完全省略了-D选项,所以它起作用了!谢谢!:)
Ray

72

该链接显示了所有内容并为我很好地工作:http : //linux.icydog.net/wpa.php

我要在这里复制内容,以防站点离线。

命令行WPA

有时,您将处于无法访问GUI联网工具的命令行状态-但是您的访问点受WPA保护。你是做什么?

假设您的无线网卡确实有效(即iwconfig可以看到它并与之交互),则使用wpa_supplicant实际上非常简单。安装wpa_supplicant

如今,大多数发行版都默认安装了wpa_supplicant。如果您有可用的命令wpa_passphrase和wpa_supplicant,那么就可以了。否则,您需要通过执行以下操作来安装该软件包(对于Ubuntu):

$ sudo apt-get install wpasupplicant

或(对于Fedora):

# yum install wpa_supplicant

或任何命令适合您的发行版。

生成配置文件

现在已经安装了wpa_supplicant,我们将创建其配置文件。知道SSID和WPA密码后,您只需执行以下操作:

$ wpa_passphrase myrouter mypassphrase > wpa.conf

当然,将“ myrouter”替换为路由器的SSID,将“ mypassphrase”替换为WPA密码,将“ wpa.conf”替换为要在其中存储配置的任何文件。此文件名不必遵循特定格式或有一个特殊的扩展名。

另外,为避免在命令行上键入密码短语(这样它不会保存在shell的历史记录中),您可以在命令行上仅指定SSID。wpa_passphrase将等待您键入密码,然后输入:

$ wpa_passphrase myrouter > wpa.conf
mypassphrase

您应该最终得到一个如下所示的文件:

network={
    ssid="myrouter"
    #psk="mypassphrase"
    psk=8ada1f8dbea59704ac379538b4d9191f6a72390581b4cd7a72864cea685b1a7f
}

建立联系

现在,我们将实际运行wpa_supplicant连接到无线网络。首先,如果您的路由器广播其SSID(默认情况下,它们都广播),您可能要确保您的无线网卡可以实际看到它:

$ iwlist scan

您可能必须以root用户身份运行才能强制刷新。

接下来,您将需要了解以下三点信息:

  1. 您的卡要使用哪个wpa_supplicant无线驱动程序。“运行” wpa_supplicant --help列出了它具有的不同驱动程序(在“驱动程序:”下)。作为0.5.8,有用的选择是:wexthostapmadwifiatmelndiswrapper,和ipw(IPW仅用于旧的内核;> = 2.6.13应该使用w外)。如果您没有看到与卡片特定的匹配项,请尝试使用wext,因为这很普遍。
  2. 卡的网络设备。通常是eth1或wlan0,但是如果不确定,可以运行iwconfig。它将报告非无线设备的“无无线扩展”,并显示任何无线设备的一些数据。
  3. 您在上一步中创建的配置文件的路径。

现在,您已经有了这些数据,以root身份运行:

# wpa_supplicant -D[driver] -i[device] -c[/path/to/config]

选项和参数之间没有空格。为了清楚起见,请不要添加括号,因为我只是添加了这些括号。例如,对于我的笔记本电脑,它看起来像这样:

# wpa_supplicant -Dwext -ieth1 -c/root/wpa.conf

您也可以通过使用该-B选项在后台运行它,以免占用控制台。

现在,您已与网络关联。

上网

要真正上线,您必须以某种方式获得IP。大多数人只想从DHCP服务器(可能是路由器内置的DHCP服务器)中获得动态IP。(我不会介绍设置静态IP和路由表,因为它本身就是野兽。)

要获得DHCP租约,请首先释放您仍然持有的任何租约(以root身份):

# dhclient -r

然后请求新的租约(当然,将eth1替换为您的网络设备的名称,与上一节中使用的名称相同):

# dhclient eth1

至少在理论上,您现在拥有IP。冲浪愉快!


1
仅供参考,对于没有经验的人,大多数无线卡接口名称将为wlan <number>,因此,例如,您配置中的第一个无线卡将为wlan0而不是eth1
xorinzor 2013年

谢谢,wpa_passphrase命令提供了帮助。我尝试了接受的答案,但是文件错误,wpa_passphrase对此提供了帮助,然后我刚刚从接受的答案中传递了第二条命令(我已经确定可以将其称为wlan0)……
Lilian A. Moraru

谢谢,这真的很棒,您能给我链接介绍如何设置静态和路由表吗……:)
Yassine

1
@AlexandreSchmidt +1全面!
约翰·斯特罗德

@JohnStrood严格地说,您应该感谢谁写了网站,因为它是网站的副本
icc97

8

Debian和其他发行版默认将wpa_suplicant作为服务运行,以管理wifi网络。wpa_suplicant可以由不同的客户端/前端(例如网络管理器GUI)处理。在此debian Wiki中对此进行了更好的解释。

wpa_cli是用于管理wifi网络的命令行wpa_suplicant客户端。

编辑:我刚刚发现这篇文章解释了如何使用nmcli,它比wpa_cli更好,因为它与GUI网络管理器及其设置和保存的wifi网络兼容。

使用wpa_cli的示例

检查我是否已经启用了wifi网络接口:

# iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=22 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

检查wpa_suplicant进程是否正在运行:

# ps -e | grep wpa
1881 ?        00:00:07 wpa_supplicant

在wpa客户互动模式下输入:

# wpa_cli

列出可用的接入点:

> scan
> scan_results

...而您得到的是这样的:

bssid / frequency / signal level / flags / ssid
e0:60:66:7c:81:7f       2417    -66     [WPA2-PSK-CCMP][ESS]    vodafone817E
e0:60:66:61:83:4b       2452    -76     [WPA2-PSK-CCMP][WPS][ESS]       vodafone834A
f8:8e:85:c5:65:c2       2462    -76     [WPA-PSK-CCMP+TKIP][WPS][ESS]   MOVISTAR_65C1
a8:d3:f7:46:0c:be       2472    -83     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]       Orange-0CBC
...

添加您的AP:

> add_network
> set_network 0 ssid "vodafone817E"
> set_network 0 psk "my-pass-phrase"

选择它作为当前:

> enable_network 0

连接到它:

> reconnect

检查状态:

> status

退出wpa_cli:

> quit

在命令行管理程序中,请求DHCP提供IP和网络设置:

# dhclient -r
# dhclient wlan0

为什么谈论wpa_cli然后写wpa_client?在Kubuntu上18.10 wpa_client似乎不作为命令存在
rtrtrt

您说得对...固定。
大卫,

3

如果不是runnig,请首先将其卡起来:

ifconfig wlan0 up

根据您的网络设置参数

iwlist wlan0 scan
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY

15
我相信这仅适用于WEP。没有WPA;)
Rinzwind'5

林兹温德(Rinzwind)是对的。这是用于WEP。对不起,您输入错误。
LnxSlck

2
没问题。把它留在这里,总有一天会有人从您的回答中受益;)
Rinzwind 2012年

即使没有像开放网络这样的密钥,此功能也能工作吗?
EvoandroidEvo 2012年

1
我希望没人能从WEP特定答案中受益:'(
Max Ried

2

如果您已checkbox安装软件包,则实际上有一种使用NetworkManager的方法。

sudo /usr/share/checkbox/create_connection SSID --security=wpa -key=WPA-KEY

(信贷:bug 923836,这是我在搜索该主题时出现的。)


2

所有暗示wpa_supplicant的答案都是错误的。是的,它可以将您连接到WPA网络,但是从长远来看,这是一个不好的解决方案,因为它很难维护并且不能很好地与有线连接配合使用。阅读此答案,并通过在命令行中使用网络管理器使您的生活更轻松。我浪费了很多时间来尝试配置wpa_supplicant,然后尝试了nmcli,它“正常工作”。


2
“工作正常”的问题在于,他们很容易“工作不正常”,然后您在哪里。对于CLI人员,直接wpa_supplicant方法更好,因为它公开了所有部分。NM的最大优点是隐藏了所有部件。所以说wpa_supplicant方法是错误的是错误的。您喜欢“正常工作”的东西,很好。您的偏好是您的权利,但是仅仅因为他们的偏好不是您的,就告诉别人他们错了是不礼貌的。这就是为什么我拒绝您的回答。
斯蒂芬·波士顿

2

您可以使用VSWM-非常简单的无线管理器。您将已知的AP放在一个简单的cfg文件(/etc/vswm.cfg)上,并在运行vswm时扫描可用的网络,并将您的卡与出现在/etc/vswm.cfg上的第一个卡相连。

VSWM可从https://github.com/dmelo/vswm获得。这里是vswm.cfg配置文件的外观的一部分:

[global]

dev = wlan0
dns = ["4.2.2.1","8.8.8.8"]

[wlan0-0]

ssid = Network1
psk = netpassword
protocol = WPA
net = dhcp

[wlan0-1]

ssid = Network2
protocol = WEP
net = static
address = 192.168.0.15/24

在幕后,它使用标准的命令行工具:iwlist,wpa_supplicant,iwconfig,dhclient ...只有它可以自动完成工作。


1

我在wpa_supplicant直接使用无线网络时遇到了麻烦。当我wpa_supplicant.confwpa_supplicant命令行上使用文件时,我的网络ID和密码生成了错误,例如

sudo wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -B

我能够与解决它wpa_cli。由于我将Windows驱动程序与Linux ndiswrapper一起使用,因此必须使用的命令序列为:

sudo modprobe ndiswrapper
sudo iwconfig wlan0 essid "<My Network ID>" mode managed
sudo wpa_cli identity "<My Network ID>" password "<My password>"

通过在GUI的网络的无线部分中添加网络来设置网络,以便可以单击有线或无线网络图标并选择无线提供商(有时需要完成登录)。


1

nmcli是Ubuntu上默认网络管理器应用程序的命令行版本。

其中的一些优点是,它使用图形界面中已经具有的配置,并且不需要root用户访问权限。

您可以运行nmcli以显示可用选项。

连接到名为MYESSID的wifi的示例:

    nmcli c up MYESSID   

1
nmcli,nm-applet,是的,您的答案是最好的,但是我不知道为什么没人投票
Saeid

@Saeid谢谢!
desgua
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.