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

第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. GoStudy——Go语言入门第一个事例程序:HelloWorld.go

    package main import ( ​ "fmt" ) func main() { ​ fmt.Println("Hello,world!!!--2019年4月1 ...

  2. 将文件夹下的所有csv文件存入数据库

    # 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...

  3. jQeury 批量删除

    /*批量删除*/ function datadel(){ var ids = new Array(); $("input[name='batch']:checked").each( ...

  4. 我发起并创立了一个 C 语言编译器 开源项目 InnerC

    本文是 VMBC / D#  项目 的 系列文章, 有关 VMBC / D# ,  见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https: ...

  5. zabbix与tomcat(六)

    一.zabbix监控远程tomcat的流程   Zabbix-server 找 zabbix Java Gateway获取Java数据 zabbix Java Gateway 找Java程序(zabb ...

  6. PHP使用文件锁解决高并发问题示例

    新建一个.txt文件,文件中什么都不用写. [一].阻塞(等待)模式:(只要有其他进程已经加锁文件,当前进程会一直等其他进程解锁文件) <?php //连接数据库 $con=mysqli_con ...

  7. python运行过程

    程序执行过程 PyCodeObject:PyCodeObject则是Python编译器真正编译成的结果. 当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Pyt ...

  8. Excel技巧--单列变多行

    当上图的单列转变成多行时,可以这么做: 1.在第一行输入A2.A3,向右拖拉第一行: 2.第二行按第一行最右顺序,写下A12,再向右拖拉出第二行: 3.选择这两行,再拖拉出一串连续顺序的多行来: 4. ...

  9. Azure SQL 数据库仓库Data Warehouse (4) 2018 TechSummit 动手实验营

    <Windows Azure Platform 系列文章目录> 上传一下之前在2018 TechSummit的动手实验营:Azure数据仓库PaaS项目架构规划与实战入门 包含PPT和Wo ...

  10. 在IntelliJ IDEA中使用VIM

    IdeaVim(下载)插件可以让你在IntelliJ IDEA中键盘敲的飞起. 安装 打开IDEA的设置,在Plugins里,你可以选择在线搜索Vim安装,当然如果不行,就可以选择单独下载后安装,以下 ...