zoukankan      html  css  js  c++  java
  • 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 仅锁屏,计算机继续工作。
    

    参考

  • 相关阅读:
    How to use epoll? A complete example in C
    分享:libzip 0.11 发布,C 语言的 zip 压缩开发包
    linux AIO (异步IO) 那点事儿
    通过引用计数解决野指针的问题(C&C++)
    [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) _Boz 博客园
    基于EPOLL写的HTTP服务器(加入了线程池)_没落都城_新浪博客
    jQuery检测浏览器名称和版本信息
    Jquery.ajax中dataType不可少
    jquery 手风琴效果
    ie下ajax错误:由于出现错误 c00ce56e 而导致此项操作无法完成
  • 原文地址:https://www.cnblogs.com/nm666/p/15567164.html
Copyright © 2011-2022 走看看