Shell脚本实现简单跳板机
阅读: 1223 | 文章分类: Shell | Tag: 系统  
跳板机是一个可以实现跳转登陆的一个功能机器,使用者必须先跳转到跳板机再通过跳板机登陆到其他应用服务器上,这个虽然有点绕,但在某种程度上讲,这个会起到一定的保护作用。
现在有很多跳板机服务提供商都把跳板机做得很好,甚至大多数都是有一个web管理界面,涵盖了用户/用户组管理、资产管理、授权规则、会话日志等等功能,但我们今天要来做的是一个能简单实现跳转的shell
![](https://www.cloudhy.cn/uploads/blog/2018.4.22-01.png)
如上图,传统意义上,如果要去连一台服务器就得去保存以下密码,而且还得手动去连,但如果做了堡垒机,直接就可以跳到任意一台服务器上
![](https://www.cloudhy.cn/uploads/blog/2018.4.22-02.png)
堡垒机的作用是方便用户跳过去另外一台服务器上,只放行堡垒机IP可以连,其他机器都无法ssh连上去,这是能起到一个保护作用。但如果你要是跟我说,万一堡垒机被黑了那全部机不就等于被黑了,这个问题我也想过,但我想更重要的是你对堡垒机做的一个安全措施,如何去防御我这里不多讲,我这里只讲实现的方式而已。
## 涵盖知识点
一、环境变量的使用
二、while循环
三、trap屏蔽命令的使用
## 环境说明
```
使用的是虚拟机,系统为CentOS7-1708
堡垒机IP:192.168.112.9 (Server-9)
服务器IP:192.168.112.8 (Server-8)
其他 IP:192.168.112.7 (无此主机,装饰作用)
192.168.112.6 (无此主机,装饰作用)
```
我们开始写脚本
```
[root@Server-9 ~]# vim board.sh
#!/bin/bash
trap "" HUP INT QUIT TSTP
while true;do
cat <
1、Server-8
2、Server-7
3、Server-6
EOP
read -p "请输入您要跳转的服务器序号:" UIP
case "$UIP" in
1)
ssh root@192.168.112.8
;;
2)
ssh root@192.168.112.7
;;
3)
ssh root@192.168.112.6
;;
*)
echo "输入有误,请重新输入!"
esac
done
```
#### [脚本下载地址](https://www.cloudhy.cn/uploads/Shell/board.sh "脚本下载地址")
如果单纯只是ssh连接过去,那退出后就退出这个脚本程序了,所以我们使用了一个while做一个死循环,用户退出不了,加上使用trap来捕捉用户的结束信号,所以这个程序相当于一个守护进程(后面的引号表示捕捉到后面的信号后什么都不做,而后面几个“HUP INT QUIT TSTP”是终止信号,可以使用kill -l查看所有终止信号的名称,这里可以使用终止信号的序号)
赋予执行权限
```
[root@Server-9 ~]# chmod u+x board.sh
```
写完脚本,我们再来创建一个用户
```
[root@Server-9 ~]# useradd board
```
将用户密码设置为123
```
[root@Server-9 ~]# passwd board
```
设置完了之后我们将脚本拷贝到board的home目录下
```
[root@Server-9 ~]# mv board.sh /home/board/
```
再修改该文件所有者跟
```
[root@Server-9 ~]# chown board. /home/board/board.sh
```
然后我们将所有要做跳转的服务器做个免密认证 [ [如何做免密认证?](https://www.cloudhy.cn/article/27 "Linux免密登陆")]
```
[board@Server-9 ~]$ ssh-keygen
[board@Server-9 ~]$ ssh-copy-id root@192.168.112.8
```
最后修改用户的.bash_profile文件,让用户一登陆上来就执行这个脚本程序
```
[board@Server-9 ~]$ vim /home/board/board.sh
# 行未加一行
~/board.sh
```
现在已经把跳板机给做好了,可以登陆测试以下,用户登陆后就执行board.sh而且还没办法退出去,这就实现了跳板机的作用
```
# 运行结果
[root@localhost ~]# su - board # 一登陆board用户就执行了board.sh的脚本程序
上一次登录:五 4月 20 09:44:58 CST 2018pts/0 上
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:
请输入您要跳转的服务器序号:^C^C^C # 用户按Ctrl+C结束进程被捕捉后无操作
输入有误,请重新输入!
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:1 # 选择登陆的服务器
Last login: Mon Apr 23 20:55:18 2018 from 192.168.112.9
[root@localhost ~]# 登出 # 用户登出远程服务器后回到跳板机程序中
Connection to 192.168.112.8 closed.
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:
```