Linux(CentOS 7) 命令行連接wifi並設置開機自動聯網


背景

閑置的舊筆記本電腦,改裝了Linux(CentOS 7)系統,無界面的最小安裝版本,想着做個簡單服務器放在公司學習和使用,即使在家也可以連公司VPN。忘記設置聯網,而又沒帶網線,遂采用連接WIFI的方式聯網,而公司的wifi又需要登錄工號和密碼,經過查找資料解決了該問題,特此記錄一下。

nmcli命令

CentOS使用NetworkManager管理網絡,NetworkManager中有很多管理工具包。

進入系統后,先執行NetworkManager自帶的nmcli命令查看網絡狀態 nmcli dev status,可以看到 wifi 的 DEVICE是 wlp7s0

[root@localhost ~]# nmcli dev status
DEVICE  TYPE      STATE   CONNECTION
enp8s0  ethernet  不可用  --
lo      loopback  未托管  --
wlp7s0  wifi      未托管  --

然后通過以下命令將無線網口開啟

$ nmcli r wifi on

wpa_supplicant工具

裝機后,系統是自帶wpa_supplicant工具的, wpa_supplicant是一個連接、配置WIFI的工具,它主要包含wpa_supplicantwpa_cli兩個程序。通常情況下,可以通過wpa_cli來進行WIFI的配置與連接,如果有特殊的需要,可以編寫應用程序直接調用wpa_supplicant的接口直接開發。

官網: http://w1.fi/wpa_supplicant/。

啟動 wpa_supplicant 應用

這個時候我們先通過下面命令啟動wpa_supplicant工具(注意 -i 參數后面的 DEVICE 名稱)

[root@localhost ~]# wpa_supplicant -i wlp7s0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
[1] 2597
[root@localhost ~]# Successfully initialized wpa_supplicant

啟動 wpa_cli 應用

搜索附近可用wifi

$ wpa_cli -i wlp7s0 scan             // 搜索附近wifi網絡
$ wpa_cli -i wlp7s0 scan_result      // 打印搜索wifi網絡結果

我們可以通過上面兩個命令獲取附近的wifi信息,如下:

[root@localhost wpa_supplicant]# wpa_cli -i wlp7s0 scan
OK
[root@localhost wpa_supplicant]# wpa_cli -i wlp7s0 scan_result
bssid / frequency / signal level / flags / ssid
xx:d0:xx:xx:xx:xx	2437	-51	[WPA2-EAP-CCMP][ESS]	wifi_1
xx:d0:xx:xx:xx:xx	2462	-40	[WPA2-PSK-CCMP][ESS]	wifi_2
xx:a5:xx:xx:xx:xx	2462	-48	[ESS]	wifi_3
xx:78:xx:xx:xx:xx	2437	-58	[WPS][ESS]	wifi_4

配置wifi

方式一:使用 wpa_cli 命令

其中 wifi_2、wifi_3、wifi_4 都比較簡單,我們可以通過wpa_cli來配置,通過如下命令添加一個網絡,配置方式查自這篇博客

$ wpa_cli -i wlp7s0 add_network      // 添加一個網絡連接

這樣便有了一個 scan_ssid為0的網絡連接。

如果要連接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密),wifi名稱是namewifi密碼是:psk

$ wpa_cli -i wlp7s0 set_network 0 ssid '"name"'
$ wpa_cli -i wlp7s0 set_network 0 psk '"psk"'
$ wpa_cli -i wlp7s0 enable_network 0

如果要連接加密方式是[WEP][ESS] (wep加密),wifi名稱是namewifi密碼是psk

$ wpa_cli -i wlp7s0 set_network 0 ssid '"name"'
$ wpa_cli -i wlp7s0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlp7s0 set_network 0 wep_key0 '"psk"'
$ wpa_cli -i wlp7s0 enable_network 0

如果要連接加密方式是[ESS] (無加密),wifi名稱是name

$ wpa_cli -i wlp7s0 set_network 0 ssid '"name"'
$ wpa_cli -i wlp7s0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlp7s0 enable_network 0

分配ip保存連接即可上網了『這一步可能報錯,參考方式二』

#分配 ip/netmask/gateway/dns
$ udhcpc -i wlp7s0 -s /etc/udhcpc.script -q
# 保存連接
$ wpa_cli -i wlp7s0 save_config

然后還可以斷開連接,選擇其他的網絡連接上網

# 斷開連接
$ wpa_cli -i wlp7s0 disable_network 0
# 連接已有的連接
$ wpa_cli -i wlp7s0 list_network             列舉所有保存的連接
$ wpa_cli -i wlp7s0 select_network 0         連接第1個保存的連接
$ wpa_cli -i wlp7s0 enable_network 0         使能第1個保存的連接

方式二:wpa_supplicant.conf 配置文件

方式一中 wifi_1 [WPA2-EAP-CCMP][ESS] 這樣的並未提及,通過對這篇文章的閱讀 Linux 使用wpa_supplicant手動配置連接wifi,對wpa_supplicant.conf 配置文件的學習與了解,發現方式一中wpa_cli -i wlp7s0 save_config就是保存相關配置的.

通過對官放文檔http://w1.fi/cgit/hostap/plain/wpa_supplicant/README的閱讀,找到一些配置示例如下:

Example configuration files for some common configurations:

1) WPA-Personal (PSK) as home network and WPA-Enterprise with EAP-TLS as work
   network

# allow frontend (e.g., wpa_cli) to be used by all users in 'wheel' group
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#
# home network; allow all valid ciphers
network={
	ssid="home"
	scan_ssid=1
	key_mgmt=WPA-PSK
	psk="very secret passphrase"
}
#
# work network; use EAP-TLS with WPA; allow only CCMP and TKIP ciphers
network={
	ssid="work"
	scan_ssid=1
	key_mgmt=WPA-EAP
	pairwise=CCMP TKIP
	group=CCMP TKIP
	eap=TLS
	identity="user@example.com"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
}


2) WPA-RADIUS/EAP-PEAP/MSCHAPv2 with RADIUS servers that use old peaplabel
   (e.g., Funk Odyssey and SBR, Meetinghouse Aegis, Interlink RAD-Series)

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
	ssid="example"
	scan_ssid=1
	key_mgmt=WPA-EAP
	eap=PEAP
	identity="user@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	phase1="peaplabel=0"
	phase2="auth=MSCHAPV2"
}


3) EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
   unencrypted use. Real identity is sent only within an encrypted TLS tunnel.

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
	ssid="example"
	scan_ssid=1
	key_mgmt=WPA-EAP
	eap=TTLS
	identity="user@example.com"
	anonymous_identity="anonymous@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	phase2="auth=MD5"
}


4) IEEE 802.1X (i.e., no WPA) with dynamic WEP keys (require both unicast and
   broadcast); use EAP-TLS for authentication

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
	ssid="1x-test"
	scan_ssid=1
	key_mgmt=IEEE8021X
	eap=TLS
	identity="user@example.com"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
	eapol_flags=3
}


5) Catch all example that allows more or less all configuration modes. The
   configuration options are used based on what security policy is used in the
   selected SSID. This is mostly for testing and is not recommended for normal
   use.

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
	ssid="example"
	scan_ssid=1
	key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
	pairwise=CCMP TKIP
	group=CCMP TKIP WEP104 WEP40
	psk="very secret passphrase"
	eap=TTLS PEAP TLS
	identity="user@example.com"
	password="foobar"
	ca_cert="/etc/cert/ca.pem"
	client_cert="/etc/cert/user.pem"
	private_key="/etc/cert/user.prv"
	private_key_passwd="password"
	phase1="peaplabel=0"
	ca_cert2="/etc/cert/ca2.pem"
	client_cert2="/etc/cer/user.pem"
	private_key2="/etc/cer/user.prv"
	private_key2_passwd="password"
}


6) Authentication for wired Ethernet. This can be used with 'wired' or
   'roboswitch' interface (-Dwired or -Droboswitch on command line).

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
ap_scan=0
network={
	key_mgmt=IEEE8021X
	eap=MD5
	identity="user"
	password="password"
	eapol_flags=0
}

通過以上的學習,再打開手機觀察手機上公司網絡連接,發現EAP方法為PEAP,然后CA證書、階段2身份驗證均可不填,輸入身份以及密碼即可,那么對 wpa_supplicant.conf 做相應配置。

$ vi /etc/wpa_supplicant/wpa_supplicant.conf

配置如下:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
	ssid="wifi名稱"
	scan_ssid=1
	key_mgmt=WPA-EAP
	eap=PEAP
	identity="我的員工號"
	password="密碼"
}

配置好了后為wlp7s0自動分配ip地址

$ dhclient wlp7s0

查看系統網絡連接狀態,發現wlp7s0已分配好地址

$ ip addr

ping 驗證網絡連接是否成功

$ ping www.baidu.com

重啟后的操作

# 先啟動 wpa_supplicant
$ wpa_supplicant -i wlp7s0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
# 分配ip
$ dhclient wlp7s0

重啟自動連接wifi

配置阿里鏡像(可跳過)

首先配置阿里鏡像能下載快一點。

1. 備份

備份Centos7系統自帶的yum源配置文件(/etc/yum.repos.d/CentOS-Base.repo)

$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
或:
$ cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2. 下載阿里雲yum源文件

$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或:
$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3. 更改CentOS-Base.repo

更改阿里雲的yum源文件,將所有http更改為https,不改有的鏡像下不下來

$ vim /etc/yum.repos.d/CentOS-Base.repo

4. 更新現有鏡像源

# 清除緩存:
$ yum clean all 
# 生成緩存
$ yum makecache

5. 更新yum

$ yum update

固定IP與開機自啟動

1、如果ifconfig命令不存在,先安裝net-tools

$ yum -y install net-tools

2、編寫固定ip與啟動wpa_supplicant腳本

$ vi /home/newmean/autostart.sh

鍵入如下命令

#!/bin/sh

#wifi設置ip與子網掩碼
ifconfig wlp7s0 99.99.99.4 netmask 255.255.254.0
#設置默認網管
route add default gw 99.99.99.255
#更新生效
ifconfig wlp7s0 up
#啟動wpa_supplicant -B 后台啟動
wpa_supplicant -B -i wlp7s0 -c /etc/wpa_supplicant/wpa_supplicant.conf
#dhcp 獲取 ip 地址
dhclient

執行權限

$ chmod +x /home/newmean/autostart.sh

3、腳本加入rc.local開機啟動

$ touch /etc/rc.local
$ chmod +x /etc/rc.local
$ vi /etc/rc.local

# 在最后一行加入autostart.sh的路徑
/home/newmean/autostart.sh

筆記本合住不斷網配置

1、編輯logind.conf文件配置

$ vi /etc/systemd/logind.conf

2、修改 HandleLidSwitch 項

HandleLidSwitch=lock  

3、重啟生效配置

$ systemctl restart systemd-logind

配置說明:

HandlePowerKey //按下電源鍵后的行為,默認power off
HandleSleepKey //按下掛起鍵后的行為,默認suspend
HandleHibernateKey //按下休眠鍵后的行為,默認hibernate
HandleLidSwitch //合上筆記本蓋后的行為,默認suspend

配置項的可選范圍為:

ignore 忽略,跳過
power off 關機
eboot 重啟
halt 掛起
suspend shell內建指令,可暫停目前正在執行的shell。若要恢復,則必須使用SIGCONT信息。所有的進程都會暫停,但不是消失(halt是進程關閉)
hibernate 讓筆記本進入休眠狀態
hybrid-sleep 混合睡眠,主要是為台式機設計的,是睡眠和休眠的結合體,當你選擇Hybird時,系統會像休眠一樣把內存里的數據從頭到尾復制到硬盤里 ,然后進入睡眠狀態,即內存和CPU還是活動的,其他設置不活動,這樣你想用電腦時就可以快速恢復到之前的狀態了,筆記本一般不用這個功能。
lock 僅鎖屏,計算機繼續工作。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM