版权声明:转载请注明出处! https://blog.csdn.net/zongf0504/article/details/86419497
在Linux 环境中, 在自动化运维时, 当遇到远程sudo命令时(如远程重启apache), 通常会遇到两个问题:交互式输入密码和提示需要tty(虚拟终端) . 虽然说可以修改服务器配置, 设置不强制要求tty(虚拟终端), 但是有时我们并没有权限直接修改服务器. 对此,我们可以借助except 来解决此问题.
1. except
except 是 linux 下解决自动交互的工具, 非系统集成环境, 需要自行安装.
$ expect -v
expect version 5.45
2. 远程sudo脚本
笔者拿远程管理apache 服务来举例,
2.1 远程apache服务管理脚本
#!/bin/bash
#Desc 远程apache管理命令
#Param $1 ip地址 $2 用户名 $3密码 $4 apache操作命令
#Auth zongf
#Date 2018-12-11
# 校验参数
if [ $# -lt 4 ]; then
echo "[error] 命令格式不正确!"
exit 3
fi
# 获取参数
ip=$1
user=$2
passwd=$3
signal=$4
# 执行远程命令
expect -c "spawn ssh -t $user@$ip sudo /usr/bin/apachectl -k $signal
expect {
*yes/no* { send yes\r; exp_continue }
*password:* { send $passwd\r }
}
interact
exit
"
2.2 调用方法
需要注意的时, 此命令执行时不能放入后台运行.
# 停止apache
rmt-apache 192.168.1.100 root 123456 stop
# 重启apache
rmt-apache 192.168.1.100 root 123456 restart