Shell脚本实现远程服务启停(无需做SSH免密配置)
可以先参考Linux SSH非交互式登录执行命令了解一下expect和sshpass
然后这里主要是想记录一下使用expect实现的方式,sshpass方式的话没什么好说的,下列脚本以Kafka的启停为例
#!/bin/bash
passwd="123"
iparray="node1 node2 node3" #这里我放的是域名,也可以放IP地址
case $1 in
"start"){
for i in $iparray
do
startKafka $i
done
};;
"stop"){
for i in $iparray
do
stopKafka $i
done
};;
esac
function startKafka(){
expect << EOF
set timeout 10
spawn ssh root@$1
expect {
"(yes/no)" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
expect "root@*" {send "/usr/local/kafka_2.13-3.1.1/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.13-3.1.1/config/server.properties\r"}
expect "root@*" {send "exit\r"}
expect eof
EOF
}
function stopKafka(){
expect << EOF
set timeout 10
spawn ssh root@$1
expect {
"(yes/no)" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
expect "root@*" {send "/usr/local/kafka_2.13-3.1.1/bin/kafka-server-stop.sh\r"}
expect "root@*" {send "exit\r"}
expect eof
EOF
}
缺点呢,也很明显,需要明文显示密码
浙公网安备 33010602011771号