arch开机自动认证简析



arch开机自动认证简析
 
 前几天搞了一下开机自启动认证。环境是arch。学校的认证是H3C的,但学校官方给的linux版认证客户端臃肿且只支持ubuntu、rehat及衍生版。好在已经大牛解决这一问题,出了个小巧的python版的认证客户端yah3c
 
        运行yah3c只要在终端输入sudo yah3c即可,但是因为用了sudo,必定还要手工输入密码,而且运行yah3c时还有一处要选择是否新建账号或者使用哪一个已经使用过的账号。要想实验开机自启动认证,就得先除去这两个输入。
 
        首先是sudo的密码输入除去,运行sudo visudo 加入
  www.2cto.com  
1 $USER  ALL=NOPASSWD: /usr/bin/yah3c
  即可。这里要注意的是,不能直接修改/etc/sudoers 文件。因为修改文件过程中会改变sudoers文件的权限从而导致sudo不能用。而且sudo的每一次执行都会读取一次/ets/sudoers,也即是说,一但你改动了/etc/sudoers,你就没机会再用sudo去把sudoers文件的权限改正确了。。唯一的办法是用root账号登录再将/etc/sudoers的权限改为0440.
 
        至于yah3c的选择输入,就要改动yah3c的代码了,要改动的代码在/usr/lib/python2.7/site-packages/yah3c/yah3c.py。定位到51行,将
 
1 choice = int(raw_input('Your choice: '))
注释,在下面增加一行
 
1 choice = 1
        又因为yah3c只是认证,还要用networkmanager或者dhcp自动获取一下ip。我这里用的是networkmanager,命令如下 :
  www.2cto.com  
1 nmcli con up id "有线连接的名称"
        然后还要考虑一下如果第一次认证时失败了能让它循环认证。我判断是否认证成功的方法是看能否获取到ip。检查ip可以用ifconfig再用正则表达式扣出来。代码如下:
 
1 ifconfig eth0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}
        再考虑到有可能在无线网络的环境,所以还要检测一下能否通过wlan0得到ip,若能得到,则退出循环,避免死循环。
 
1 if [ -z $theip ]
2  then
3      theip=`ifconfig wlan0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
4 fi
所以最后的脚本如下:
 
01
#!/bin/bash
02  www.2cto.com  
theip='';
03
while [ -z $theip ]
04
do
05
    sudo yah3c
06
    sleep 2
07
    nmcli con up id "Wired connection 1"
08
    sleep 2
09
    theip=`ifconfig eth0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
10
     if [ -z $theip ]
11
    then
12
        theip=`ifconfig wlan0 | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}'`
13  www.2cto.com  
    fi
14
 done
        再最后就是把脚本放到合适的地方。我用的是kde环境,在kde环境准备好后会自动运行 ~/.kde4/Autostart/文件夹下的脚本。所以我便把脚本放到那。
 
        貌似到此搞定了,但实践中发现有bug。。。在自动认证后,一开始确实能正常上网。但有时会再一段时间后自动掉线。目前尚不知是kde4/Autostart的机制的问题还是yah3c的问题。。
 
        另外,我觉得开机自启动还是一个比较笨的方法的,如果能在第一次检测到有网线连接时启动脚本,那就perfect了
 

相关内容

    暂无相关文章