请启用 Javascript 以查看内容

Shell 开发跳板机功能脚本

 ·   ·  ☕ 4 分钟  ·  ✍ CNSRE

利用Shell开发跳板机功能脚本案例

开发企业级Shell跳板机案例。要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式中断脚本到跳板机服务器上执行任何系统命令。

首先做好SSH密钥验证(跳板机地址172.16.1.200)。

以下操作命令在所有机器上操作:

1
2
3
4
[root@cnsre ~]# useradd cnsre  #<==要在所有机器上操作。< code="">
[root@cnsre ~]# echo 123456|passwd --stdin cnsre #<==要在所有机器上操作。< code="">
Changingpassword for user cnsre
passwd:all authentication tokens updated successfully.

以下操作命令仅在跳板机上操作:

 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
[root@cnsre ~]# su - cnsre
[root@cnsre ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1  #<==生成密钥对。< code="">
[jump@cnsre ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.33.130   #<==将公钥分发到其他服务器。< code="">
Theauthenticity of host '192.168.33.130 (192.168.33.130)' can't be established.
RSA keyfingerprint is fd:2c:0b:81:b0:95:c3:33:c1:45:6a:1c:16:2f:b3:9a.
Are yousure you want to continue connecting (yes/no)? yes
Warning:Permanently added '192.168.33.130' (RSA) to the list of known hosts.
jump@192.168.33.130'spassword:
Now trylogging into the machine, with "ssh '192.168.33.130'", and check in:
  
  .ssh/authorized_keys
  
to makesure we haven't added extra keys that you weren't expecting.
  
[jump@cnsre ~]$ ssh-copy-id -i ~/.ssh/id_dsa.pub 192.168.33.129  #<==将公钥分发到其他服务器。< code="">
Theauthenticity of host '192.168.33.129 (192.168.33.129)' can't be established.
RSA keyfingerprint is fd:2c:0b:81:b0:95:c3:33:c1:45:6a:1c:16:2f:b3:9a.
Are yousure you want to continue connecting (yes/no)? yes
Warning:Permanently added '192.168.33.129' (RSA) to the list of known hosts.
jump@192.168.33.129'spassword:
Now trylogging into the machine, with "ssh '192.168.33.129'", and check in:
  
  .ssh/authorized_keys
  
to makesure we haven't added extra keys that you weren't expecting.

实现传统的远程连接菜单选择脚本。

菜单脚本如下:

1
2
3
4
  cat <<menu
           1)LB01-172.16.1.200
              2)exit
menu

利用linux信号防止用户中断信号在跳板机上操作。

1
2
3
functiontrapper () {
        trap ':' INT  EXIT TSTP TERM HUP  #<==屏蔽这些信号。< code="">
}

用户登录跳板机后即调用脚本

(不能命令行管理跳板机),并只能按管理员的要求选单。
以下为实战内容。
脚本放在跳板机上:

  • 将pofifle.d目录下创建,登录用户就自动执行的jump.sh 脚本
1
2
3
4
5
[root@cnsre ~]# echo '[ $UID -ne 0 ] && . /server/scripts/jump.sh'>/etc/profile.d/jump.sh  
[root@cnsre ~]# cat /etc/profile.d/jump.sh 
#!/bin/sh
[ $UID -ne 0 ] && . /server/scripts/jump.sh
#判断如果不是root用户,就执行jump.sh,然后调用/server/scripts/jump.sh脚本
  • 编写跳板机主脚本
 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
#!/bin/sh
############################################
#zabbix微信告警脚本
#修改时间:2020-xx-xx
#修改内容:修改内容描述
############################################
trapper(){
    trap ':' INT EXIT TSTP TERM HUP  #<==定义需要屏蔽的信号,冒号表示啥都不做。
}
main(){
while :
do
      trapper
      clear
      cat<<menu
       1)LB01-172.16.1.200
menu
read -p"Pls input a num.:" num
case "$num" in
    1)
        echo 'login in LB01.'
        ssh 172.16.1.200
        ;;
    110)
        read -p "your birthday:" char
        if [ "$char" = "0926" ];then
          exit
          sleep 3
        fi
        ;;
    *)
        echo "select error."
        esac
done
}
main

执行效果如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# su - cnsre  #<==切到普通用户即弹出菜单,工作中直接用cnsre登录,即弹出菜单。
    
     1) LB01-172.16.1.200
Pls inputa num.:1  #<==选1进入LB01 服务器。
login in192.168.33.129.
Lastlogin: Tue Oct 11 17:23:52 2016 from 192.168.33.128
[jump@cnsre~]$  #<==按ctrl+d退出到跳板机服务器再次弹出菜单。
     1) LB01-172.16.1.200
[jump@cnsre~]$   #<==按ctrl+d退出到跳板机服务器再次弹出菜单。
     1) LB01-172.16.1.200
Pls inputa num.:110    #<==选110进入跳板机命令提示符。
yourbirthday:0926      #<==需要输入特别码才能进入的,这里管理员通道,密码要保密呦。
[root@cnsre]#  #<==跳板机管理命令行。

最终脚本

  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
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
#!/bin/bash
############################################
#登录服务器选择菜单
#  2020-1-15  v1
#
#修改时间:2020-xx-xx
#修改内容:修改内容描述
############################################
trapper(){
    trap ':' INT EXIT TSTP TERM HUP  #<==定义需要屏蔽的信号,冒号表示啥都不做。
}
main(){
while :
do
        trapper
        clear
        cat<<menu
        1.GIT-GC11-PROD
        2.GIT-GC11-运维主机
        3.[exit]
menu
read -p"请出入对应的数字:" a
menu1 (){
        cat<<EOF
        1.MiniProgram
        2.H-Link
        3.SpeedBoat
        按任意键返回主菜单
EOF
read -p"请出入对应的数字:" num1
}
menu2 (){
        cat<<EOF
        1.zabbix
        2.jenkins
        3.elk
        按任意键返回主菜单
EOF
read -p"请出入对应的数字:"  num2
}
#######################[  menu1  ]############################
[ $a -eq 1 ] && {
  clear
  menu1
  [ $num1 -eq 1 ] && {
  echo "休眠3秒"
  sleep 3
  echo "进入小程序成功"
  menu1
}  
  [ $num1 -eq 2 ] && {
  echo "休眠3秒"
  sleep 3
  echo "进入H-link成功"
  menu1

}
[ $num1 -eq 3 ] && {
  echo "休眠3秒"
  sleep 3
  echo "进入SpeedBoat成功"
  menu1

}

}
####################[  menu2  ]########################################
[ $a -eq 2 ] && {
  clear
  menu2
  [ $num2 -eq 1 ] && {
  echo "休眠3秒"
  sleep 3
  echo "进入zabbix 成功"
  menu2
}
  [ $num2 -eq 2 ] && {
  echo "ssh jenkins"
  ssh -i  /home/xue/key/CI-CD.pem    ec2-user@xx.xx.xx.xx
  echo "ssh  jenkins ok"
  menu2

}
[ $num2 -eq 3 ] && {
  echo "休眠3秒"
  sleep 3
  echo "进入elk成功"
  menu2

}

}
[ $a -eq 3 ] && {
  echo "退出成功"
  exit
}

[ $a -eq 100 ] && {
  read -p"匹配成功,请输入口令:" mima
  if [ "$mima" = "5418"];then
  sudo -i
  sleep 3
  fi

}
done
}
main

文章链接
https://www.cnsre.cn/posts/210421130319/

分享

CNSRE
作者
CNSRE
一个📚学习中的👨‍💻SRE运维工程师🚀🚀🚀


目录