Shell脚本实现远程服务启停(无需做SSH免密配置)

可以先参考Linux SSH非交互式登录执行命令了解一下expect和sshpass


然后这里主要是想记录一下使用expect实现的方式,sshpass方式的话没什么好说的,下列脚本以Kafka的启停为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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
} 

缺点呢,也很明显,需要明文显示密码

posted @   RFAA  阅读(200)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示