第一节 跳板机实现原理(图例)

第2节 涉及到的知识点

命令:trap

拓展知识:进程与信号

trap 语法,作用,使用

[jeson@mage-jump-01 ~/]$  trap -l
   1) SIGHUP        2) SIGINT        3) SIGQUIT     4) SIGILL         5) SIGTRAP
   6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL      10) SIGUSR1

trap -l 打印所有进程的信号
trap -p 显示那些信号已经被设置了。
trap “” signals(或编号) 为空表示这个信号,执行的命令为空。可以同设置多个trap “” signals1 signals2 signals N
trap “commands” signals(编号) 收到signals指定信号时,信号功能复位同时执行commands命令。可以同时设置多个
trap signals(或编号) 没有命令部分,信号复原默认状态。可以同时恢复多个:trap signals1 signals2 signals N

使用方法:

[jeson@mage-jump- ~/]$trap 'echo "I am a boy"' INT
[jeson@mage-jump- ~/]$trap -p
  trap -- 'echo "I am a boy"' SIGINT
  trap -- '' SIGTSTP
  trap -- '' SIGTTIN
  trap -- '' SIGTTOU
[jeson@mage-jump- ~/]$^CI am a boy # 设置按下ctrl + c 的时候,执行echo "I am a boy" [jeson@mage-jump- ~/]$trap 2 # 取消 echo hello 的命令,还原组合键(ctrl + c)的默认
[jeson@mage-jump- ~/]$trap -p
  trap -- '' SIGTSTP
  trap -- '' SIGTTIN
  trap -- '' SIGTTOU
[jeson@mage-jump- ~/]$^C # 还原Ctrl+C 的默认功能
[jeson@mage-jump- ~/]$

案例:ctrl + c 后,清理工作

窗口1

窗口2

cat >touch_file.sh <<-EOF 
#!/bin/bash
trap "find /tmp -type f -name 'jeson_*' |xargs rm -f && exit " INT
while :
do
touch /tmp/jeson_\$(date +%F-%T)
sleep
done
EOF
[jeson@mage-jump-01 ~/]$ bash touch_file.sh

# 观察窗口1按下ctrl + c后,是否自动清理文件

[jeson@mage-jump-01 ~/]$ watch -n 1 ls /tmp/jeson_*

第2节 实现跳板机

跳板机主脚本:

窗口1:trap信号跳板机脚本

窗口2:设置特定用户登录不受跳板机代码影响

窗口3:测试效果

[jeson@mage-jump-01 ~/]$cat /server/scripts/tiao_ban_ji.sh

#!/bin/bash
##########################
# Date: : --
# Author: Created by Jeson
# Mail: @qq.com
# Funcsion:This scripts funcsion is tiao ban ji
##########################
function trapper(){
trap '' INT EXIT TSTP TERM HUP
}
while true
do
trapper
clear
cat <<-menu
========= Host List =======
) 10.0.0.3 lb-nginx-
) 10.0.0.4 lb-nginx-
) 10.0.0.10 web-lnmp-
) 10.0.0.11 web-lnmp-
) EXIT
menu
read -p "Please select:" num
case "$num" in
) ssh -P52113 $USER@lb-nginx-
;;
) ssh -P52113 $USER@lb-nginx-
;;
) ssh -P52113 $USER@web-lnmp-
;;
) ssh -P52113 $USER@web-lnmp-
;;
# 密码式调用分发密匙脚本
sshkey) bash /server/scripts/send_key.sh
;;
# 只对特定用户有效
) exit
esac
done

[jeson@mage-jump-01 ~/]$ cat  /etc/profile.d/tb.sh

[ $UID -ne  ] && [ $USER != 'jeson' ] &&\

source /server/scripts/tiao_ban_ji.sh

只有特定用户“root”和“jeson”可以使用“0) EXIT”功能。

======Host List========
  1) 10.0.0.3     lb-nginx-01 
  2) 10.0.0.4     lb-nginx-02 
  3) 10.0.0.10    web-lnmp-01 
  4) 10.0.0.11    web-lnmp-02
  0) EXIT
Please select:

密匙分发脚本:

密匙分发脚本1:cat /server/scripts/send_key.sh
#!/bin/bash
path_FenFa_sshKey_conf=/server/scripts/conf/sshkey.conf
path_FenFa_sshKey_exp=/server/scripts/fenfa_sshkey.exp
[ ! -f ~/.ssh/id_dsa ] && { ssh-keygen -t dsa -q -P '' -f ~/.ssh/id_dsa>/dev/null ; }
while read line
do
remote_user=$(echo $line|awk -F "[@ -]+" '{ print $1 }')
remote_password=$(echo $line|awk -F "[@ -]+" '{ print $2 }')
remote_ip=$(echo $line|awk -F "[@ -]+" '{ print $3 }')
remote_Port=$(echo $line|awk -F "[@ -]+" '{ print $4 }')
expect $path_FenFa_sshKey_exp $remote_Port $remote_user $remote_password $remote_ip ~/.ssh/id_dsa.pub &>/dev
/null
done<$path_FenFa_sshKey_conf
密匙分发exepect脚本实现非交互方式:cat /server/scripts/fenfa_sshkey.exp
#!/bin/expect
if { $argc != } {
send_user "usage: expect fenfa_sshkey.exp pub_key_file remote_user remote_passaword remote_ip\n"
exit
}
# defile var
set remote_Port [ lindex $argv ]
set remote_user [ lindex $argv ]
set remote_password [ lindex $argv ]
set remote_ip [ lindex $argv ]
set remote_dsa [ lindex $argv ]
spawn ssh-copy-id -i $remote_dsa -p $remote_Port $remote_user@$remote_ip
expect {
"yes/no" { send "yes\r";exp_continue }
"*password" { send "$remote_password\r";exp_continue }
}
 需要分发到的主机配置文件:
[root@web-lnmp-01 ~/]#cat /server/scripts/conf/sshkey.conf 
root  10.0.0.31
jeson 10.0.0.200
jeson 10.0.0.10

trap实现跳板机的更多相关文章

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

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

  2. Shell实现跳板机,为什么用跳板机

    整理自:http://blog.chinaunix.net/uid-22101889-id-3167454.html 注意:请谨慎使用,到现在为止,使用了,我还没找到改回去的方法. 1.     问题 ...

  3. shell脚本之nginx启动脚本、统计日志字段、for循环实战、跳板机

    1.NGINX启动脚本 #!/bin/bash # chkconfig: 235 32 62 # description: nginx [ -f /etc/init.d/functions ] &am ...

  4. 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

    一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...

  5. 13、ssh跳板机

    13.1.前提条件: 1.跳板机服务器和其它服务器建立了ssh秘钥登录: 2.目前的环境: (1)各服务器上都建立了lc用户,并给于sudo (lc ALL= NOPASSWD:ALL )权限,lc就 ...

  6. 【自动部署】Ansible 怎么通过堡垒机/跳板机 访问目标机器

    Ansible机器的 /root/.ssh/config 配置如下即可:Host 目标机器IP User root IdentityFile=/root/.ssh/xxx_id_rsa ProxyCo ...

  7. navicat使用跳板机连接数据库-ssh

    1. 目标数据库的域名/IP,端口,用户名,密码:如图1 2. 这时候不要点OK!选择SSH这个tab 3. 选中User SSH Tunnel:填写跳板机域名/IP,用户名,密码(注意:端口22不要 ...

  8. 跨越跳板机传文件nc

    从线上服务器与本机互传文件 传输方 nc -l 10000 < a.tar 接收方 nc xx.xx.xx.xx 10000 >a.tar 原理: 文件传输方运行nc,指定端口,设置监听文 ...

  9. 在有跳板机的情况下,SecureCRT自动连接到目标服务器

    为了服务器的安全,运维人员经常会要求我们先登录到跳板机,然后再SSH连接到目标服务器.但是这样是很繁琐的,每次在SecureCRT创建一个连接,都需要输入SSH命令,然后输入密码. 下面的方法可以实现 ...

随机推荐

  1. SpringCloud使用Feign调用服务时,@FeignClient注解无法使用

    关于解决这个问题的理论根源传送门:https://blog.csdn.net/alinyua/article/details/80070890我在这里只提供解决方案 0. 结论和解决方案 Spring ...

  2. C#语言与变量、数据类型

    一.计算机语言 1.计算机语言包括:C\PHP\Ruby\JAVA\C#\Basi\JS\C++ 2.计算机语言发展史:机器语言——汇编语言——高级语言 二.代码 1.程序始终:Code(编码).Co ...

  3. Linux上安装MangoDB

    版本 MongDB4.0.3 安装 tar -zxvf mongodb-linux-x86_64-rhel62-4.0.3.tgz默认的数据目录在/data/db,也可以指定目录启动命令./bin/m ...

  4. FlexRay笔记

    1.FlexRay具有高速.可靠及安全的特点.FlexRay在物理上通过两条分开的总线通信,每一条的数据速率是10MBit/s.CAN网络最高性能极限为1Mbps,而FlexRay总数据速率可达到20 ...

  5. java_oop_关键字

    空白符注释 标识符分隔符操作符字面量关键字 instanceof java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出, ...

  6. Feign中使用hystrix

    Feign中使用hystrix 一.在Order工程中的bootstrap.yml中增加配置 feign: hystrix: enabled: true

  7. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

  8. Java继承(下)

    Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...

  9. NodeJs中类定义及类使用

    1.首先定义类Point,文件名为point.class.js: // 定义类 class Point { //构造函数 constructor(x, y) { this.x = x;//类中变量 t ...

  10. 静态初始化块和main方法哪个先被执行?

    直接看代码 public class BlockAndMain { public static void main(String[] args) { System.out.println(" ...