Fedora30 nmcli连接wifi命令,不再使用wpa_supplicant/wpa_cli

本文介绍了在Fedora30中如何通过nmcli命令行工具连接WiFi,避免使用wpa_supplicant和wpa_cli。通过nmcli,作者成功连接到手机热点,并强调在新系统中掌握最新命令的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ENV:

[root@Fedora ~]# uname -r
5.1.19-300.fc30.x86_64
[root@Fedora ~]# cat /etc/redhat-release 
Fedora release 30 (Thirty)

这两天月底,手机流量还有很多,正好可以把手机当热点,让笔记本可以上网。

在连手机热点的时候突然想到,怎么才能用命令行来连接呢,又是网上找资料又是测试系统里的命令,汗!!!

想到以前也有很多玩wpa_supplicant命令的,开始我的表演(哎呀~不要嫌啰嗦)

为了演示,把网断掉。

一、wpa_supplicant/wpa_cli(一定要root账号,其他账号操作权限不够,sudo命令都不行,不知怎么回事)

查看网络

[root@Fedora ~]# ifconfig wlp9s0  //减少信息,只找常用的这个网卡查看
wlp9s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether f2:95:f5:1e:80:d4  txqueuelen 1000  (Ethernet)
        RX packets 16832  bytes 13319654 (12.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16765  bytes 2713438 (2.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

另外的命令:

[root@Fedora ~]# iw dev
phy#0
	Interface wlp9s0
		ifindex 3
		wdev 0x1
		addr f2:95:f5:1e:80:d4
		type managed
		txpower 15.00 dBm
		multicast TXQ:
			qsz-byt	qsz-pkt	flows	drops	marks	overlmt	hashcoltx-bytes	tx-packets
			0	0	0	0	0	0	0	00
#如果知道网卡名称,可以直接使用以下命令,和上面命令一样的
[root@Fedora ~]# iw dev wlp9s0 info  
Interface wlp9s0
	ifindex 3
	wdev 0x1
	addr 68:94:23:ba:ee:d5
	ssid Honor 8
	type managed
	wiphy 0
	channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
	txpower 15.00 dBm
	multicast TXQ:
		qsz-byt	qsz-pkt	flows	drops	marks	overlmt	hashcol	tx-bytestx-packets
		0	0	0	0	0	0	0	0	0

这里可以看到物理网卡和wlp9s0名称,之后我们要用的

查找网络

[root@Fedora ~]# iw wlp9s0 scan |grep SSID
	SSID: Honor 8

要想查看具体信息,直接运行命令 # iw wlp9s0 scan
这样可以看到wifi热点的加密方式(想了解的自行百度、google)

wpa_passphrase命令,这个命令就是生成网络信息的:

                 wpa_passphrase "wifi名称" "密码"
[root@Fedora ~]# wpa_passphrase "Honor 8" "12345678"
network={
	ssid="Honor 8"
	#psk="12345678"
	psk=6cda728e4eaa531716ee552ad9f14262ce98f00189fadb4e003f796902ff69f9
}

使用wpa_supplicant命令:

这里就是没有使用root用户,运行时一直出错,还以为命令错了呢,找了很久也没找出问题,后来直接root用户就成功了
[test@Fedora ~]$ sudo wpa_supplicant -i wlp9s0 -c<(wpa_passphrase "Honor 8" "12345678")
Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'.
[root@Fedora ~]# wpa_supplicant -i wlp9s0 -c<(wpa_passphrase "Honor 8" "12345678")
Successfully initialized wpa_supplicant
wlp9s0: SME: Trying to authenticate with a4:71:74:00:11:43 (SSID='Honor 8' freq=2437 MHz)
wlp9s0: SME: Authentication request to the driver failed
wlp9s0: SME: Trying to authenticate with a4:71:74:00:11:43 (SSID='Honor 8' freq=2437 MHz)
wlp9s0: SME: Authentication request to the driver failed
wlp9s0: SME: Trying to authenticate with a4:71:74:00:11:43 (SSID='Honor 8' freq=2437 MHz)
wlp9s0: SME: Authentication request to the driver failed
wlp9s0: SME: Trying to authenticate with a4:71:74:00:11:43 (SSID='Honor 8' freq=2437 MHz)
wlp9s0: SME: Authentication request to the driver failed
wlp9s0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="Honor 8" auth_failures=1 duration=10 reason=CONN_FAILED
wlp9s0: CTRL-EVENT-SSID-REENABLED id=0 ssid="Honor 8"
wlp9s0: SME: Trying to authenticate with a4:71:74:00:11:43 (SSID='Honor 8' freq=2437 MHz)
wlp9s0: SME: Authentication request to the driver failed
wlp9s0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="Honor 8" auth_failures=2 duration=23 reason=CONN_FAILED
^Cnl80211: deinit ifname=wlp9s0 disabled_11b_rates=0
wlp9s0: CTRL-EVENT-TERMINATING 

这就是成功了,手机上也 显示了连接一个设备,但是这个一起在运行也没有完成,多试了几次也是一样的,到最后才知道这样是行不通的了,没法正常连接啊,也不能上网。

只能再想其他的方法了。

wpa_supplicant和wpa_cli这两个命令是不能成功了。

二、nmcli网络管理命令

记得在去年学习RHEL7的时候,网络管理的命令 行是nmcli命令了,也包括nmtui的GUI命令,这个是不是可行 的呢?

[root@Fedora ~]# nmtui
bash: nmtui: command not found...
Install package 'NetworkManager-tui' to provide command 'nmtui'? [N/y] 

看来GNOME的桌面环境是没安装这个GUI了,我们不用这个命令,不是还有个nmcli命令行么,

[root@Fedora ~]# nmcli 
agent       device      help        networking  
connection  general     monitor     radio       
[root@Fedora ~]# nmcli device 
connect     disconnect  lldp        monitor     set         status
delete      help        modify      reapply     show        wifi
[root@Fedora ~]# nmcli device 

运行nmcli一路tab(玩linux不要说不知道tab)

wait,wait,,看到了什么,,wifi啊,这个可是正需要的啊,进去看看

[root@Fedora ~]# nmcli device wifi 
IN-USE  SSID     MODE   CHAN  RATE       SIGNAL  BARS  SECURITY 
        Honor 8  Infra  6     65 Mbit/s  100     ▂▄▆█  WPA2     
[root@Fedora ~]# 

这个正是我们需要的啊,也就是手机热点的信息。没错啊

之前的一次操作,不能算成功,应该是系统对网络信息有记录才导致的,之后再次使用就不成功了
[root@Fedora ~]# nmcli device connect 
enp4s0f2        lo              virbr0          wlp9s0
help            p2p-dev-wlp9s0  virbr0-nic      
[root@Fedora ~]# nmcli device connect wlp9s0 
Passwords or encryption keys are required to access the wireless network 'Honor 8'.
Warning: password for '802-11-wireless-security.psk' not given in 'passwd-file' and nmcli cannot ask without '--ask' option.
Error: Connection activation failed: (7) Secrets were required, but not provided.
根据提示,再次运行命令,输入密码就可以了
[root@Fedora ~]# nmcli device connect wlp9s0 --ask
Passwords or encryption keys are required to access the wireless network 'Honor 8'.
Password (802-11-wireless-security.psk): ••••••••
Device 'wlp9s0' successfully activated with 'cfdc4bdc-3189-4129-a371-ea2b39825373'.
这就是再次操作不成功了,继续努力吧
[root@Fedora ~]# nmcli device connect wlp9s0
Error: Failed to add/activate new connection: A 'wireless' setting is required if no AP path was given.

可能是思路错了,要在wifi的命令来操作

[root@Fedora ~]# nmcli device wifi  //tab之后有list和connect
connect  help     hotspot  list     rescan   
[root@Fedora ~]# nmcli device wifi list 再tab看到的不再重要了,回去
bssid     hwaddr    ifname    --rescan  
[root@Fedora ~]# nmcli device wifi list 
IN-USE  SSID     MODE   CHAN  RATE       SIGNAL  BARS  SECURITY 
        Honor 8  Infra  6     65 Mbit/s  100     ▂▄▆█  WPA2     
[root@Fedora ~]# nmcli device wifi connect //tab看到了我们想连接的热点
A4:71:74:00:11:43  Honor\ 8           
[root@Fedora ~]# nmcli device wifi connect Honor\ 8 //tab后
bssid         ifname        password      wep-key-type  
hidden        name          private       
#连接网络要用到网卡的,ifname这个都认识吧
#在输入ifname后再tab直接出wlp9s0,这是因为我的电脑就一个网卡      
[root@Fedora ~]# nmcli device wifi connect Honor\ 8 ifname wlp9s0 //还差个密码呢
bssid         ifname        password      wep-key-type  
hidden        name          private       
[root@Fedora ~]# nmcli device wifi connect Honor\ 8 ifname wlp9s0 password 12345678
Device 'wlp9s0' successfully activated with 'd31829c0-dfed-426f-be98-856892b589b4'.

#这里的12345678是我手机热点的密码,不要搞错哦

提示成功连接了,看看网络信息并测试下吧

[root@Fedora ~]# nmcli device show wlp9s0 
GENERAL.DEVICE:                         wlp9s0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         68:94:23:BA:EE:D5
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Honor 8   //这里就是wifi热点名称
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/17
IP4.ADDRESS[1]:                         192.168.43.123/24
IP4.GATEWAY:                            192.168.43.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.43.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.43.0/24, nh = 0.0.0.0, mt = 600
IP4.DNS[1]:                             192.168.43.1
IP6.ADDRESS[1]:                         2409:8904:1e70:54a4:37a0:c1cc:d3c:57db/64
IP6.ADDRESS[2]:                         fe80::759b:6abb:6247:e936/64
IP6.GATEWAY:                            fe80::a671:74ff:fe00:1143
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600
IP6.ROUTE[2]:                           dst = 2409:8904:1e70:54a4::/64, nh = ::, mt = 600
IP6.ROUTE[3]:                           dst = ::/0, nh = fe80::a671:74ff:fe00:1143, mt = 6>
IP6.ROUTE[4]:                           dst = ff00::/8, nh = ::, mt = 256, table=255
IP6.DNS[1]:                             2409:8904:1e70:54a4::a5
lines 1-20/20 (END)

[root@Fedora ~]# ifconfig wlp9s0
wlp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.123  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::759b:6abb:6247:e936  prefixlen 64  scopeid 0x20<link>
        inet6 2409:8904:1e70:54a4:37a0:c1cc:d3c:57db  prefixlen 64  scopeid 0x0<global>
        ether 68:94:23:ba:ee:d5  txqueuelen 1000  (Ethernet)
        RX packets 16946  bytes 13344794 (12.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16964  bytes 2774702 (2.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@Fedora ~]# ping www.baidu.com
PING www.baidu.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=50 time=59.6 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=50 time=144 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 59.625/102.054/144.484/42.430 ms

成功了,高兴下吧,哈哈!!

最后,从这次的经历也是明白了,新的系统更新的新的功能,会相应的整合以前的命令和功能,要想学好linux就要不断的学习和调整知识体系。虽然不知道前一个命令为什么不成功(可能是热点使用的WPA2-PSK加密吧,功能没有跟上)。

网上找了一大堆的wifi连接都是wpa_supplicant,看来还是没有新系统的nmcli命令更好用的啊。

有的时候还是要多在系统中找方法,毕竟网上的水军太多了,吃了很多亏,也浪费了很多时间。

<think>嗯,用户遇到了在Windows PowerShell中运行wpa_cli命令时报错的问题,提示无法识别该命令。我需要先理解wpa_cli是什么。wpa_cli是用于与wpa_supplicant交互的命令行工具,通常用于Linux系统管理Wi-Fi连接。但Windows本身并不自带这个工具,所以用户在PowerShell中使用时自然会报错。 接下来,可能的解决方案有几个方向。首先,用户是否在Windows上安装了包含wpa_cli的工具?比如一些第三方软件包或WSL。如果没有安装,可能需要指导用户如何获取。其次,用户是否误用了命令,比如应该在WSL中运行而不是PowerShell。另外,检查是否有路径问题或拼写错误也是必要的。 然后,考虑到用户可能不太熟悉Linux和Windows的区别,需要解释清楚为什么Windows原生环境不支持这个命令,以及替代方法。比如使用WSL安装Linux发行版,或者寻找Windows下的替代工具,如NirSoft的WirelessKeyView。同时,提醒用户注意第三方软件的安全性。 还需要验证提到的解决方案是否有效,比如安装wpa_supplicant的方法在Windows是否可行,或者通过WSL确实能运行wpa_cli。此外,用户可能需要配置环境变量,或者了解如何在PowerShell中调用WSL的命令。 最后,生成相关问题时要覆盖常见后续疑问,比如安装WSL的步骤、替代工具推荐以及命令存在却仍报错的情况。确保回答结构清晰,分步骤引导用户解决问题,并引用相关资料帮助用户进一步了解。</think>### 分步解决方案:Windows PowerShell中`wpa_cli`命令无法识别的解决方法 #### 问题分析 `wpa_cli`是Linux系统中用于管理Wi-Fi连接命令行工具,属于`wpa_supplicant`软件包的一部分[^1]。**Windows系统默认不包含此工具**,因此在PowerShell中直接运行会报错: ``` 无法将wpa_cli项识别为cmdlet、函数、脚本文件或可运行程序的名称 ``` --- #### 解决方案 ##### 方法1:通过WSL在Windows中使用`wpa_cli` 1. **安装WSL(Windows Subsystem for Linux)** 在PowerShell中以管理员身份运行: ```powershell wsl --install ``` 选择Ubuntu等Linux发行版完成安装。 2. **在WSL中安装`wpa_supplicant`** 打开WSL终端,执行: ```bash sudo apt update && sudo apt install wpasupplicant ``` 3. **通过WSL调用命令** 在PowerShell中直接使用WSL前缀: ```powershell wsl wpa_cli -i wlan0 scan # 示例命令 ``` ##### 方法2:使用Windows原生替代工具 1. **NirSoft WirelessKeyView** 查看已保存的Wi-Fi密码:[官网链接](https://www.nirsoft.net/utils/wireless_key.html) ![](https://example.com/wirelesskeyview-screenshot.png) # 示意图:显示Wi-Fi密码界面 2. **PowerShell原生命令** 查看网络适配器信息: ```powershell Get-NetAdapter | Where-Object {$_.MediaType -eq "Native 802.11"} ``` ##### 方法3:编译Windows版`wpa_supplicant` 1. 从源码编译(需开发环境) 参考[官方文档](https://w1.fi/wpa_supplicant/)配置Windows版本。 --- #### 验证步骤 1. **检查命令是否存在** 在WSL中运行: ```bash which wpa_cli # 应返回路径如`/usr/sbin/wpa_cli` ``` 2. **测试基础功能** ```bash wpa_cli -v # 查看版本信息 ``` --- #### 常见错误排查 | 错误现象 | 原因 | 解决方法 | |---------|------|---------| | `wsl: command not found` | WSL未安装 | 通过Microsoft Store安装WSL | | `sudo: apt: command not found` | 非Debian系Linux发行版 | 使用`yum`(Fedora)或`zypper`(SUSE) | | 无线网卡未识别 | 缺少驱动 | 在WSL中加载驱动或使用USB无线网卡 | --- ### 相关问题 1. 如何在WSL中永久添加环境变量? 2. Windows有哪些开源的Wi-Fi管理工具? 3. 如何通过PowerShell脚本实现自动化Wi-Fi连接? : `wpa_supplicant`是跨平台的Wi-Fi管理工具,但Windows原生支持有限。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值