linux服务器的跳板机是利用啥原理实现的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux服务器的跳板机是利用啥原理实现的?相关的知识,希望对你有一定的参考价值。

参考技术A 原理都一样吧,远程连接、登录、取得控制权,方法就看自己本事了。追问

可以用秘钥的方法吗?

本回答被提问者采纳
参考技术B

笔者曾经在国内某ERP厂商担任过产品经理,现就职于某互联网公司担任运维主管,对堡垒机的选型及具体应用实践有一定的发言权,故形成此文,权当抛砖。

堡垒机是用来解决“运维混乱”的

堡垒机是用来干什么的?简而言之一句话,堡垒机是用于解决“运维混乱”的。何谓运维混乱?当公司的运维人员越来越多,当需要运维的设备越来越多,当参与运维的岗位越来越多样性,如果没有一套好的机制,就会产生运维混乱。具体而言,你很想知道“哪些人允许以哪些身份访问哪些设备“而不可得。

堡垒机让“运维混乱”变“运维有序”

于是乎,堡垒机便诞生了,它承担起了运维人员在运维过程中的唯一入口,通过精细化授权,可以明确“哪些人以哪些身份访问哪些设备”,从而让运维混乱变得有序起来。

堡垒机让“运维混乱”变“运维安全”

更重要的一点是:堡垒机不仅可以明确每一个运维人员的访问路径,还可以将每一次访问过程变得可“审计”,一旦出现问题,可追溯回源。

如何做到可审计?显而易见的方法是“全程录像”和“指令查询”。全程录像很好理解,那么何谓指令查询呢?所谓指令查询是指将运维操作指令化。举例而言,你家里在过去24小时内进小偷了,你有监控录像,但需要你翻阅这24小时的录像显然不是一个聪明的做法,如果这时系统能够帮助你把24小时录像中出现的所有人头像直接识别并罗列出来,你自然可以知道什么时间进来的小偷。“指令查询”也是如此,录像文件是你最后的保障,但通过指令查询可以帮助你快速的定位到录像文件的可疑位置。

有什么可以推荐的堡垒机品牌?

本想做一篇科普文,不由的披上了广告的嫌疑。但只是以笔者亲身经历为例,笔者所在公司的电商系统部署在的Win之上,有一个配置文件,不知被谁做了修订,导致当天订单全部失败。老板震怒,要求笔者立即定位是谁做的修订。该电商系统一周之前做的更新,针对配置文件所在服务器的运维录像共有83个,合计27个小时左右的时长,笔者需要在这83个视频文件中寻找到是谁对配置文件做了修订,笔者当时想小号的心都有。当在“行云管家”中通过检索此配置文件的名称,行云管家帮我定位到3个可疑的录像位置时,笔者不由得虎躯一震,菊花一紧......

有兴趣的自己去看吧:行云管家堡垒机在线体验

不输入用户名密码通过跳板机登录到线上linux机器

问题:

一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址。我们经常看到的现象就是下图这样,每次都要通过 ssh 登录两次,输入两次密码,密码也经常输错,不胜其烦。

 

先决条件:

mac或者其他类unix操作系统作为本地机器,安装expect

 

解决办法:

利用expect的自动交互特性与服务器自动交互

 1 #!/usr/bin/expect
 2 #author 1031294046@qq.com
 3 
 4 #定义数组,这里有多台就定义多个
 5 #连接枚举
 6 set connection_enum(1) "第一台目标机器别名" #名字可以随便取
 7 set connection_enum(2) "第二台目标机器别名"
 8 
 9 #用户枚举
10 set connection_user(1) "第一台目标机器用户名"
11 set connection_user(2) "第二台目标机器用户名"
12 
13 #连接密码
14 set connection_passwd(1) "第一台目标机器密码"
15 set connection_passwd(2) "第二台目标机器密码"
16 
17 #连接ip,这里说下一般跳板机跟目标机器ssh连接是走的内网,所以配置的是内网ip
18 set connection_ip(1) "第一台目标机器ip"
19 set connection_ip(2) "第二台目标机器ip"
20 
21 #函数定义必须在使用前面否则会报错
22 #列出可用的host以及枚举
23 proc connectionlist {} {
24     global connection_enum #函数里面如果要用全局变量expect语法里要global进来
25     #[array size connection_enum]命令是求数组connection_enum的长度
26     for {set i 1} {$i <= [array size connection_enum]} {incr i} { #这是expect语法的for循环和自增
27         puts "signin \[$i\] for $connection_enum($i)" #输出到控制台
28     }
29 }
30 
31 #登录host
32 proc connecthost { enum } {
33     global connection_passwd
34     global connection_ip
35     global connection_user
36 
37     #我这里登录跳板机是免密的,所以注释掉下面三行,如果不是免密登录跳板机就需要打开注释
38     spawn ssh -l 跳板机用户名 跳板机ip
39     #expect {
40     #         "*password*" { send "登录跳板机密码\r" }
41     #       }
42 
43     #接收到跳板机登录成功的消息后登录目标机器,这一行expect的内容你的跟我的不一定一样,根据跳板机器返回的信息进行匹配
44     expect "*System restart required*" {send "ssh -l $connection_user($enum) $connection_ip($enum)\r"}
45     expect {
46             "yes/no" {send "yes\r";exp_continue;}
47             "*password:*" { send "$connection_passwd($enum)\r" }
48            }
49     interact
50 }
51 
52 if {[llength $argv] == 0} {
53     puts "choice your login host:"
54     connectionlist
55 
56     expect {
57         #正则匹配输入的值,1或2
58         "\[12\]" {
59             set num $expect_out(buffer); #$expect_out(buffer)获取输入值,set进行类型转换
60             connecthost $num;
61         }
62         # "1" { connecthost 1 }
63         # "2" { connecthost 2 }
64     }
65 }

 

根据你的个人及其配置修改好文件之后就可以直接运行脚本了。

以上是关于linux服务器的跳板机是利用啥原理实现的?的主要内容,如果未能解决你的问题,请参考以下文章

碉堡堡垒机的工作原理是啥啊?

跳板机脚本(粗糙版)

运维堡垒机是什么?有什么作用?

利用Shell开发跳板机功能脚本案例

利用Shell开发跳板机功能脚本案例

数据的实时同步