sudo 自动输入密码的脚本 alias别名

【alias简介】
alias 命令用于定义一个命令的简写格式,例如,alias lsproc='ls -l /proc',其中定义了一个新的命令lsproc,以后当输入lsproc的时候,都会执行ls -l proc,显示proc的目录内容
为了使alias永久生效,可以将定义写在 ~/.bashrc 中
vim ~/.bashrc
添加:alias lsproc='ls -l /proc'
编辑完~/.bashrc文件以后,重启控制台,输入alias<Enter>,即可看到刚才定时的别名,输入lsproc即可得到结果

注:~表示用户的/home/usrname目录;alias的意思是别名

【正文】
之前每次关机都需要遵循以下步骤:
ubuntu@x:sudo -i #获取权限
[sudo]password for x: #提示输入密码
root@x:shutdown -h now #获取完权限,执行关机,个人喜欢用shutdown而不是halt

或者合成一句:
ubuntu@x:sudo shutdown -h now  
[sudo]password for x:
root@x:(关机)

为了方便,我想起了alias,于是编写了下面的alias别名,看能不能自动应答,做到一键关机:
ubuntu@x:echo 123123|sudo shutdown -h now' #123123 是我的系统密码;定义halt别名会覆盖原来的halt,要引用原来系统的halt,只需加一个用\halt即可
ubuntu@x:halt
[sudo]password for x: #结果仍然出现密码要求,显然没有自动应答

于是网上各种搜,誓要把这个问题解决,过程中包括下面这些命令,但是都不行
alias halt='echo 123123|sudo shutdown -h now' 
alias halt='echo 123123>stdin;sudo -S shutdown -h now' #sudo -S表示从标准stdin,也就是键盘输入

直到后来,千辛万苦之下,终于解决了这个问题,其中需要用到重定向符号<,>,2>等,[url]http:www.2cto.com/os/201403/284912.html 可以看看重定向相关介绍

【最终解决方法】(以自动应答sudo -i为例,此命令的作用是申请root权限)
第一步: 为了避免直接使用明文密码,首先定义一个系统环境变量PASS=123123
ubuntu@x:vim /etc/profile  
#在/etc/profile中添加:
# export PASS=‘123123’
# 保存,exit
ubuntu@x:source /etc/profile #使之生效
ubuntu@x:export #查看
新建好之后,就可以用${PASS}来引用

第二步: 编写应答指令,这一步是纯粹是实验得出的
新建一个pass文件,里面写入密码内容 123123,保存,exit

ubuntu@x:sudo -S -i<pass #输入这个命令,会出现以下提示信息:
[sudo] password for x: stdin: is not a tty #[sudo] password for x: 标准输入sdin不是一个tty(控制台终端)(基于下面的理由,你可以不用理会这条信息)
ubuntu@x:sudo -i #但其实这时候你已经获得了权限,输入sudo -i就可以获得权限,到这一步,其实我们已经完成了大半工作,即本质上已经实现了自动应答,但是还需要进一步优化,做到一步到位
root@x: #证明已经获取了root权限

优化如下:
避免输出错误提示信息:
sudo -S 2> /dev/nul # 2>表示stderr的重定向,/dev/null是一个特殊的输出设备,它会舍弃一切指向它的输入

用echo来自动建立文件
echo ${PASS}>/tmp/pass #${PASS}就是上面的密码,123123; > /tmp/pass 表示输出重定向/tmp/pass文件,/tmp是一个临时文件夹

用分号(;)来一步完成
echo ${PASS}>/tmp/pass ; sudo -S -i</tmp/pass 2>/dev/null ; sudo -S -i #注意为什么两次sudo(第二次在第一次的基础上真正得到权限)

用alias简化命令格式:
alias su='echo ${PASS}>/tmp/pass ; sudo -S -i</tmp/pass 2>/dev/null ; sudo -S -i‘ #新的su替代原来的su,原来的su用\su访问

最后,加入~/.bashrc使之永久生效
测试以下:
ubuntu@x:su
root@x: #干净利落地获得了系统权限


【晒晒自动应答命令】
#su,reboot,halt
alias su=' echo ${PASS} > /tmp/pass ; sudo -i -S < /tmp/pass 2> /dev/null ; sudo -i -S'
alias reboot=' echo ${PASS} > /tmp/pass ; sudo -i -S< /tmp/pass 2> /dev/null ; sudo -S reboot'
alias halt=' echo ${PASS} > /tmp/pass ; sudo -i -S< /tmp/pass 2> /dev/null ; sudo -S shutdow -h now'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值