Shell脚本:人机交互脚本-su


本文演示通过expect工具实现su命令自动输入密码验证的方法。

Expect软件安装步骤,请参考:
http://blog.csdn.net/hanlizhong85/article/details/71038532

1、 su.sh脚本实现
脚本实现功能:用户切换,执行完成之后进入新用户界面。
############################################################
#!/bin/bash

USERNAME=$1
PASSWD=$2

expect -c "
 set timeout 1000
 spawn su - ${USERNAME}
 expect "*assword:" { send "${PASSWD}\\r" }
 interact
"
############################################################
执行结果:
-bash-4.1$ whoami
hanlzh
-bash-4.1$ ./su.sh root root          --入参1为用户名,入参2为密码
spawn su - root
Password:
[root@HLZ ~]# whoami
root

2、 su_cmd.sh脚本实现
脚本实现功能:切换到其他用户并执行命令,执行完成之后回到原用户界面。
############################################################
#!/bin/bash
#Created by hanlizhong on 2013.08.26
#Notice: ${CMD} must be a system commond or a script has absolute path.

USERNAME=$1

if [ $(whoami) == root ]; then
 CMD=$2
 su - ${USERNAME} -c "${CMD}"
elif [ $(whoami) == ${USERNAME} ]; then
 CMD=$2
 sh -x ${CMD}
else
 PASSWD=$2
 CMD=$3
 test -z "${CMD}" && (echo "Input error!" && exit 1)
 expect -c "
  spawn su - ${USERNAME} -c \"${CMD}\"
  expect "*assword:" { send "${PASSWD}\\r" }
  expect eof
 "
fi
############################################################
执行结果:
-bash-4.1$ rm -rf /home/hanlzh/log.txt
rm: cannot remove `/home/hanlzh/log.txt': Permission denied
-bash-4.1$ ./su_cmd.sh root root "rm -rf /home/hanlzh/log.txt"
spawn su - root -c rm -rf /home/hanlzh/log.txt
Password:
-bash-4.1$


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值