linux-解決遠端sudo需要tty(虛擬終端)
阿新 • • 發佈:2019-01-13
在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