如何shell中不要输入密码自动切换到root

如何在shell总不要输入密码自动切换到root?

 

Linux系统中,只要你有权限你就可以任意妄为。记得刚开始工作那会儿,对Linux不是很熟悉。

但是在Linux做事情,少不了makefile。makefile中又少不了编写clean规则,于是就会有rm -rf 。

有时候我们又会有rm -rf ${BUILD_DIR}/,做了一次痛快的clean。

没想到有时候我们的BUILD_DIR是空的,于是我们就rm -rf /,我们的系统也就挂了。

有几次这样的危险经历,幸亏老大对数据有备份。

那么如何保证不出现这种情况呢,Linux给你最大的权限,当然你也就拥有给自己限制的能力了。

使用Linux多年的人也会养成不到必须要使用root权限的时候尽量不要让程序在root权限下执行。

于是我们就使用普通用户make,然后使用root用户的权限执行。

如果我们想让脚本即编译程序,又执行程序。那么就需要在编译完成后使用root的身份来执行。

我们想到了sudo!

但是sudo需要我们人工输入密码,那么有没有一种解决办法呢?

答案是肯定的:

下面的方式可以绕过密码提示,让脚本自动运行畅行无阻。

 

usr$ echo passwd | sudo -S touch /root/myfile

现在看一下,/root目录已经有了myfile这个文件了。

昨天一个网友问如何能够将输入密码工作shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现从普通用户“test”切换root用户自动输入root密码,不用在终端提示符下执行密码输入操作。 步骤: (1)vi autosu.sh (2)#! /usr/bin/expect -f //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。 spawn su - // 在expect 用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 interact //操作完成。 注意:这里强调一下执行脚本时要注意的地方,不能按照习惯来用sh ***.sh来这行expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的时候直接./***.sh就可以了。~切记! 应用二: 从普通用户切换root之后,执行“ls”操作,调用执行aaa.sh,返回执行结果,间隔10S。 #/usr/bin/expect -f spawn su - // 在expect 用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 expect "#" //当遇到提示符以#结尾时,即为root权限时; send "ls\r" //expect 用spend方法调用ls 命令,并且回车(“\r”) expect "#" send "sh aaa.sh\r" //调用sh aaa.sh,即执行一个脚本文件aaa.sh。 expect "#" send "echo $?\r" sleep 10 interact
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值