linux-解决远程sudo需要tty(虚拟终端)
在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
还没有评论,来说两句吧...