• 在shell脚本中使用sudo


        今天让我的ubuntu 64位 在宿舍接入了校园网,使用的依旧是xrgsu,xrgsu这个渣渣只有32位,木有64位,于是安装了32位库,安装了xrgsu,然后为了避免每次认证都要输入帐号和密码,利用expect执行认证脚本,这个脚本叫做ruijie.sh(来自西电开源wiki)。

        然而人的懒惰是无极限的。我的wlan0,也就是无线网卡每次开机的时候应该会是打开的,而且由于我还在其它地方连接其它类型的网络,比如实验室的无线网络,于是我想再写一个脚本,在执行ruijie.sh之前先根据wlan0是不是打开来做一点处理。

        很明显,要是wlan0打开的话,我需要关闭wlan0,用命令

    ifconfig wlan0 down

    就可以关闭。由于我是telnetning用户,所以我需要在命令前面加上sudo,像这样

    sudo ifconfig wlan0 down

    但是平常在tty执行的时候,会弹出"[sudo]password for telnetning:",我输入密码就能执行,但是在脚本中显然不能人工输入。顺便提一下,更改sudoers文件其实也是起不到什么作用的。首先想到的就是用expect,但是,这个,或许有更简单点的方法。

    在man sudo中我们可以看到这么一段:

    -S          The -S (stdin) option causes sudo to read the password from
                       the standard input instead of the terminal device.  The
                       password must be followed by a newline character.

    翻译过来就是  sudo 的 -S 选项允许从stdin读入密码,那这样就好办了。

    测验一下:

    echo "password" | sudo -S visudo

    用echo将我的password传递给sudo了,于是顺利执行。

    这下就好解决我的问题了:

    echo “password” | ifconfig wlan0 down

    比较简单的一种方法,呵呵

  • 相关阅读:
    Windows API 中 OVERLAPPED 结构体 初始化
    QString 转换成 wchar 的一个小陷阱
    Windows VHD Create, Attach, 获得Disk序号
    Programmatically mount a Microsoft Virtual Hard Drive (VHD)
    chcp437 转换英语,在西班牙语系统中无效
    Windows 版本 Enterprise、Ultimate、Home、Professional
    openssl 查看证书
    Ubuntu 搜索文件
    微软的 Sysinternals 系统管理工具包,例如可找出自动启动的流氓软件
    HTML 表格实例
  • 原文地址:https://www.cnblogs.com/telnetning/p/3084826.html
Copyright © 2020-2023  润新知