linux跳板机开发之trap信号机应用

2024-08-30 14:38

本文主要是介绍linux跳板机开发之trap信号机应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  场景1:公司新招聘了一个配置管理员,他的工作是负责将公司开发人员写的新代码依次分发到办公室测试环境、IDC测试环境和正式线上环境。因此公司需要开发一个程序,当配置管理员登录服务器,只能进入分发的管理界面,无法进行其他操作或直接进入bash界面。

  场景2:公司有大量的服务器,我们不能让每个人用root用户登录服务器,这样很危险。但我们又不能再每一台服务器上为所有人创建登录账户,这样管理起来非常繁琐,于是就有一种叫做跳板机或堡垒机的解决方案。

我们可以用shell脚本实现上面的功能,但通常shell脚本有一个不是bug的bug。平时我们执行脚本时发现有什么问题时,就会用ctrl+c强制终止脚本。但是上面的场景中我们可不希望自己的shell脚本在运行中被其他用户使用快捷键之类进入到bash界面,做我们不希望做的事情,这里就引出了我们接下来介绍的信号处理。

查看系统信号:

使用kill –l或trap –l都可以列出linux系统的信号名称:

trap信号处理:是内置命令,用于在接收到信号后将要采取的行动,常见用途在脚本被中断时完成清理工作。

trap命令:

trap -l   把所有信号打印出来

trap -p  把当前的trap设置打印出来

trap “” signals   =====>为空表示这个信号失效。

trap “commands”signals ======>收到signals指定的信号时,信号功能复位同时执行commands命令

trap signals  =====>没有命令部分,信号复原

常用信号:

  在使用信号名时需要省略SIG前缀,通常我们需要忽略的信号有HUP INT QUIT TSIP TERM,也就是信号1,2,3,15,20。

用stty -a 可以列出中断信号与键盘的对应。

trap命令测试:

测试:同时处理多个信号

注意:TSTP(20)命令没有显示出来,但在脚本就可以显示。

我们也可以用字母来创建信号的:

信号名不能直接批量取消的

trap “:” HUP INT QUIT TSTP TERM 等价于trap HUP INT QUIT TSTP TERM

:也是一个内置命令

例如:写循环程序是可以这么写

while :
do uptimesleep 1
done

注:历史上,shell总是用数字来代替信号,而新的脚本程序应该使用信号的名字。

linux信号的生产应用案例:

测试1:触发信号后清理/tmp下以bqh_开头的文件

[root@bqh-118 scripts]# vim tarp1.sh
#!/bin/sh
# ******************************************************
# Author       : a?锦衣卫 
# Last modified: 2019-05-09 22:37
# Email        : 1147076062@qq.com
# blog         : https://www.cnblogs.com/su-root
# Filename     : tarp1.sh
# Description  : 
# ******************************************************
trap "find /tmp -type f -name 'bqh_*'|xargs rm -f && exit" INT
while :dotouch /tmp/bqh_$(date +%F_%T)sleep 1
done

注:执行脚本前用watch ls 监控一下状态

测试二:shell跳板机(触发信号后屏蔽信号)

①   首先做好ssh key验证或使用expect脚本

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

③   利用linux信号防止用户在跳板机上操作

④   用户登录后调用脚本

ssh免密钥登录:

ssh-keygen –t dsa –P ‘’ –f ~/.ssh/id_dsa     #这种格式不用交互,可以man ssh-keygen

ssh-copy-id –I .ssh/id_dsa.pub “-p 22 root@192.168.43.119”

/etc/profile.d/      #加载系统登录程序的一个目录

这个目录下即使没有执行权限,开机也会加载的。

下面我们来写一个跳板机,准备2台及以上虚拟机即可。

第一台  MySQL server:192.168.43.117  

第二台  Web server:192.168.43.118  

第三台  Application server:192.168.43.119  

① 在所有机器上创建跳板机用户:

useradd tbj

echo 123456|passwd --stdin tbj

② 在跳板机上创建密钥

su – tbj

ssh-keygn –t das –P ‘’ –f ~/.ssh/id_dsa

③ 将公钥分发至其他机器上

ssh-copy-id –I .ssh/id_dsa.pub “-p 22 tbj@192.168.43.117”

④ 再开一个窗口使用root用户写脚本

[root@bqh-118 scripts]# vim tiaoban.sh 
#!/bin/bash
trap '' INT QUIT TSTP TERM HUPfunction menu() {cat <<-bqh             #cat <<-字母   用-的话开头结尾都得用tab键隔开。
=========Server List=============
1) Conneciton to the MySQL Server.
2) Conneciton to the Web Server.
3) Conneciton to the Application Server.
4) exit
==============================bqh              #前面是一个tab键,非4个空格
}function wait_info {
echo -n "Please wait a moment, Connecting."
sleep 1
echo -n "."
sleep 1
echo -n "."
clear
echo "The Connection is Successfully!"
sleep 1
}function host() {case "$1" in1)wait_infossh -p22 $USER@192.168.43.117;;2)wait_infossh -p22 $USER@192.168.43.118;;3)wait_infossh -p22 $USER@192.168.43.119;;4)exit;;*)echo -e "\e[31;5m Invalid options. \e[0m" && sleep 1exit
esac
}function main() {
while :
doclearmenuread -p "please select:" numhost $num
done
}
main

接着我们在跳板机/etc/profile.d下写一个脚本来加载跳板脚本:

[root@bqh-118 profile.d]# cat tiaoban.sh 
#!/bin/sh
[ $UID -ne 0 ] && [ $UID -ne 501 ] &&\
. /server/scripts//tiaoban.sh

接下来我们执行脚本,从新打开窗口登录

ok,测试完成。 

注:脚本程序通常是由上到下的顺序解释执行的,所有必须在你想保护的那部分代码以前指定trap命令。

跳板机安全应用:

1、  首先跳板机禁止外网ip登录,只能内网ip登录。

ListenAddress 192.168.43.1

2、  其他服务器有外网ip的也别忘了禁止外网ip登录,只能内网ip登录。同时禁止root登录,等做完ssh-key认证,连密码登录也被禁止了,只能通过证书登录,而且只有跳板机有其他服务器的密钥。

修改/etc/ssh/sshd_config

PasswordAuthentication  yes

改为:no

 3、先远程拨号登录VPN,然后登录跳板机,最后再从跳板机登录其他服务器。

----------如果感觉还不安全,那就跳板机后再跳板机…

这篇关于linux跳板机开发之trap信号机应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1121111

相关文章

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

linux lvm快照的正确mount挂载实现方式

《linuxlvm快照的正确mount挂载实现方式》:本文主要介绍linuxlvm快照的正确mount挂载实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux lvm快照的正确mount挂载1. 检查快照是否正确创建www.chinasem.cn2.

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Linux给磁盘扩容(LVM方式)的方法实现

《Linux给磁盘扩容(LVM方式)的方法实现》本文主要介绍了Linux给磁盘扩容(LVM方式)的方法实现,涵盖PV/VG/LV概念及操作步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1 概念2 实战2.1 相关基础命令2.2 开始给LVM扩容2.3 总结最近测试性能,在本地打数据时,发现磁盘空

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设