linux-解决远程sudo需要tty(虚拟终端)

版权声明:转载请注明出处! 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

猜你喜欢

转载自blog.csdn.net/zongf0504/article/details/86419497