1. 程式人生 > >linux-解決遠端sudo需要tty(虛擬終端)

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 [email protected]$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