linux 下ssh +trap 实现跳板机

1、基础知识

查看系统信号

使用命令 kill -l和trap -l

[root@localhost ~]# trap -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP

6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1

11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3

38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7

58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX

[root@localhost ~]#

2、键盘控制信号 1,2,3,15,20

信号说明

HUP(1)

挂起,通常因终端掉线或用户退出而引发

INT(2)

中断,通常因按下Ctrl+C 组合键而引发

QUIT(3)

退出,通常因按下Ctrl+/组合键而引发

ABRT(6)

中止,通过某些严重的执行错误而引发

ALRM(14)

报警,通常用来处理超时

TERM(15)

终止,通常在系统关机时发送

TSTP(20)

停止进程的运行。但该信号可以被处理和忽略,用户键入SUSP字符(通常是CTRL+Z)发出这个信号

 

 

 

 

 

 

 

 

 

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

[root@localhost ~]# stty -a

speed 38400 baud; rows 25; columns 80; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;

swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;

lnext = ^V; flush = ^O; min = 1; time = 0;

-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts

-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff

-iuclc ixany imaxbel iutf8

opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt

echoctl echoke

[root@localhost ~]#

3、 trap命令

trap 命令是内置命令,用help trap 查看帮助;trap命令用于在接受到信号后将要采取的行动;

trap 常见用途是在脚本程序中断被中断时完成清理工作

 

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

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

trap “” signals   ****为空表示这个信号失效

trap “cmd” signals ****收到signals 指定信号时,信号功能复位同时执行cmd命令

Trap signals   **** 没有命令部分,信号恢复

实例

[root@localhost ~]# trap -p

trap -- '' SIGTSTP

trap -- '' SIGTTIN

trap -- '' SIGTTOU

[root@localhost ~]# trap "" 2   ===Ctrl+C 失效

[root@localhost ~]# trap  2     ====Ctrl+C 恢复

[root@localhost ~]# ^C

[root@localhost ~]# ^C

[root@localhost ~]#

[root@localhost ~]# trap "echo -n 'you are trping ctrl+c'" 2

[root@localhost ~]# ^Cyou are trping ctrl+c

[root@localhost ~]#

同时处理多个信号

[root@localhost ~]# trap "" 1 2 3 15 20

[root@localhost ~]# trap -p

trap -- '' SIGHUP

trap -- '' SIGINT

trap -- '' SIGQUIT

trap -- '' SIGTERM

trap -- '' SIGTSTP

trap -- '' SIGTTIN

trap -- '' SIGTTOU

#TSTP(20)命令没有显示出来,但脚本中可以显示出来

[root@localhost ~]#

[root@localhost scripts]# cat  trap.sh

trap "" 1 2 3 15 20

trap -p

[root@localhost scripts]# sh  trap.sh

trap -- '' HUP

trap -- '' INT

trap -- '' QUIT

trap -- '' TERM

trap -- '' TSTP

[root@localhost scripts]#

不能同时恢复多个信号

[root@localhost scripts]# trap HUP INT QUIT TERM TSTP

[root@localhost scripts]# trap -p

trap -- '' SIGHUP

trap -- 'HUP' SIGINT

trap -- 'HUP' SIGQUIT

trap -- 'HUP' SIGTERM

trap -- '' SIGTSTP

trap -- '' SIGTTIN

trap -- '' SIGTTOU

root@localhost scripts]# trap ":" HUP INT QUIT TERM TSTP

:是内置命令

root@localhost scripts]# help :

:: :

    空的命令。

    没有效果; 此命令不做任何操作。

    退出状态:

    总是成功。

[root@localhost scripts]#

案例1 :触发信号清理文件

[root@localhost scripts]# cat touch_files.sh

#!/bin/bsah

trap "find /tmp -type f -name "abc_*"|xargs rm -f && exit" INT

while true

do

  touch /tmp/abc_$(date +%F-%T)

  usleep 500

done

[root@localhost scripts]#

再开一个终端查看变法
[root@localhost ~]# cd /tmp/

[root@localhost tmp]# watch ls

[root@localhost tmp]#

案例2shell跳板机

1)首先做好ssh key 验证或使用expect

2)实现传统的远程连接菜单选择者脚本

3)利用Linux信号防止用户在跳板机上操作

4)用登录后立即调用脚本

第一:

设置ssh key
ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa  #这种格式不用交互;man ssh-keygen
ssh-copy-id -i .ssh/id_dsa.pub -p22 root@192.168.0.3

第二:

/etc/profile.d 加载系统登录的第一目录;没有执行权限也可执行

第三
调试shell脚本并添加到/etc/profile.d/ 目录里

[root@tiaobanji ~]# cat /servers/scripts/tiaoban.sh

#!/bin/bash

function trapper(){

  trap ‘' INT QUIT TSTP TERM HUP

}

 

function menu(){

cat <<-EOF <<===EOF前面是一个减号

=============HOST LIST================

1)192.168.0.3

2)192.168.0.4

3)192.168.1.11

EOF<==EOF 前面是一个tab键,非4个空格

}

function host(){

case "$1" in

  1)

          ssh -p22 root@192.168.0.3

  ;;

  2)

  ssh -p22 root@192.168.0.4

  ;;

  6|*)

           exit

  ;;

esac

}

 

function main(){

     while true

     do

      trapper

      clear

      menu

      read -p "please select:" num

      host $num

     done

}

main

[root@tiaobanji ~]#

[root@tiaobanji ~]# cat -A  /servers/scripts/tiaoban.sh 显示全部内容包括隐藏

#!/bin/bash$

function trapper(){$

  trap '' INT QUIT TSTP TERM HUP$

}$

$

function menu(){$

^Icat <<-EOF$

=============HOST LIST================$

^I1)192.168.0.3$

^I2)192.168.0.4$

^I3)192.168.1.11$

^IEOF$

}$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值