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

以你之姓@ 2022-03-27 11:38 669阅读 0赞

在Linux 环境中, 在自动化运维时, 当遇到远程sudo命令时(如远程重启apache), 通常会遇到两个问题:交互式输入密码和提示需要tty(虚拟终端) . 虽然说可以修改服务器配置, 设置不强制要求tty(虚拟终端), 但是有时我们并没有权限直接修改服务器. 对此,我们可以借助except 来解决此问题.

1. except

except 是 linux 下解决自动交互的工具, 非系统集成环境, 需要自行安装.

  1. $ expect -v
  2. expect version 5.45

2. 远程sudo脚本

笔者拿远程管理apache 服务来举例,

2.1 远程apache服务管理脚本

  1. #!/bin/bash
  2. #Desc 远程apache管理命令
  3. #Param $1 ip地址 $2 用户名 $3密码 $4 apache操作命令
  4. #Auth zongf
  5. #Date 2018-12-11
  6. # 校验参数
  7. if [ $# -lt 4 ]; then
  8. echo "[error] 命令格式不正确!"
  9. exit 3
  10. fi
  11. # 获取参数
  12. ip=$1
  13. user=$2
  14. passwd=$3
  15. signal=$4
  16. # 执行远程命令
  17. 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 调用方法

需要注意的时, 此命令执行时不能放入后台运行.

  1. # 停止apache
  2. rmt-apache 192.168.1.100 root 123456 stop
  3. # 重启apache
  4. rmt-apache 192.168.1.100 root 123456 restart

发表评论

表情:
评论列表 (有 0 条评论,669人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux 终端tty pty pts描述

    在使用Linux的过程中,当我们通过ssh或者telnet等方式连接到服务器之后,会有一个相应的终端来对应。而在直接登陆到Linux服务器的时候也有一个对应的终端。也就是说所有