利用Shell开发跳板机功能脚本案例
开发企业级Shell跳板机案例。要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式中断脚本到跳板机服务器上执行任何系统命令。
1) 首先做好 SSH 密钥验证(跳板机地址:192.168.1.5)
下面的命令在所有的机器上操作:
[root@jump ~]# useradd zhouhao
[root@jump ~]# echo 123456 | passwd --stdin zhouhao
[root@test ~]# useradd zhouhao
[root@test ~]# echo 123456 | passwd --stdin zhouhao
以下操作命令仅在跳板机上操作:
[root@jump ~]# su - zhouhao
[root@jump ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1 #<==生成密钥对
[root@jump ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub#<==将公钥分发到其他服务器。
#如果ssh端口 不是22 ,可以使用 -p参数 如下:
[root@jump ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub "-p 5180 服务器IP"
2) 实现传统的远程;连接菜单选择脚本。
菜单脚本如下:
cat <<menu
1)LB01-192.168.1.3
2)exit
menu
3) 利用 linux 信号防止用户中断信号在跳板机上操作.
functiontrapper () {
trap ':' INT EXIT TSTP TERM HUP #<==屏蔽这些信号。< code="">
}
4) 用户登录跳板机后即调用脚本(不能命令行管理跳板机),并只能按照管理员的要求选单。
以下为实战内容:
脚本放在跳板机上:
4.1 将pofifle.d目录下创建,登录用户就自动执行的jump.sh 脚本
[root@jump ~]# echo '[ $UID -ne 0 ] && . /server/scripts/jump.sh'>/etc/profile.d/jump.sh
[root@jump ~]# cat /etc/profile.d/jump.sh
#!/bin/sh
[ $UID -ne 0 ] && . /server/scripts/jump.sh
#判断如果不是root用户,就执行jump.sh,然后调用/server/scripts/jump.sh脚本
[root@jump ~]# mkdir -p /server/scripts/
[root@jump ~]# cd /server/scripts/
4.2 编写跳板机主脚本
[root@jump scripts]# cat jump.sh
#!/bin/bash
trapper(){
trap ':' INT EXIT TSTP TERM HUP #定义需要屏蔽的信号,冒号表示啥也不做
}
main(){
while :
do
trapper
clear
cat<<menu
1)LB01-192.168.1.3
menu
read -p "Pls input a num.:" num
case "$num" in
1)
echo 'login in LB01.'
ssh 192.168.1.3
;;
110)
read -p "your birthday:" char
if [ "$char" = "0306" ];then
exit
sleep 3
fi
;;
*)
echo "select error"
esac
done
}
main
执行效果如下:
[root@jump ~]# su - zhouhao
1)LB01-192.168.1.3
Pls input a num.:1 #<==选1进入LB01 服务器。
login in LB01.
Last login: Mon Oct 14 14:02:25 2019 from 192.168.1.5
[zhouhao@h1 ~]$ #<==按ctrl+d退出到跳板机服务器再次弹出菜单。
1)LB01-192.168.1.3
Pls input a num.:110 #<==选110进入跳板机命令提示符。
your birthday:0306 #<==需要输入特别码才能进入的,这里管理员通道,密码要保密呦。
[root@jump ~]# #<==跳板机管理命令行。
本文介绍如何利用Shell脚本开发企业级跳板机功能,通过SSH密钥验证确保安全登录,并通过菜单选择限制用户操作,同时利用Linux信号防止用户中断,确保跳板机的安全性和可控性。

558

被折叠的 条评论
为什么被折叠?



