跨跳板机登陆服务器shell脚本

2023-05-16

expect shell 自动越过跳板机登陆服务器

#!/usr/bin/expect -f

set password "123"
set serverHost(0) "tx3-testad01.bj"
set serverHost(1) "tx3-testad01.bj"
set serverHost(2) "tx3-server-ad02.bj"
set serverHost(3) "tx3-server-ad03.bj"
set serverHost(4) "tx4-server-ad04.bj"
set serverHost(5) "tx3-server-ad05.bj"
set serverHost(6) "tx4-server-ad06.bj"
set serverHost(7) "tx3-server-ad07.bj"


spawn ssh wuchengjin@relay.inke.cn
for {set i 0} {$i < 10} {incr i} {
        expect {
                "*assword:" {
                        send "$password\r"
                        exp_continue
                }
                "*code:*" {
                        expect_user -re "(.*)\n"
                        set code $expect_out(1,string)
                        puts "your code is $code\n"
                        send "$code\r"
                        exp_continue
                }
                "*@relay:~*" {
                        puts "\nplease select your server:"
                        set serverHostCount [array size serverHost]
                        for {set k 0} {$k < $serverHostCount} {incr k} {
                                puts $k,$serverHost($k)
                        }
                        expect_user -re "(.*)\n"
                        set serverSelected $expect_out(1,string)
                        puts "your select server is $serverSelected:$serverHost($serverSelected)\n"
                        send "ssh $serverHost($serverSelected)\r"
                        break
                }
        }
}
interact

expect shell 自动越过跳板机登陆服务器

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
import sys
import math
import signal
import fcntl
import termios
import struct

def sigwinch_passthrough (sig, data):
	winsize = getwinsize()
	global child
	child.setwinsize(winsize[0],winsize[1])

def getwinsize():
	"""This returns the window size of the child tty.
	The return value is a tuple of (rows, cols).
	"""
	if 'TIOCGWINSZ' in dir(termios):
		TIOCGWINSZ = termios.TIOCGWINSZ
	else:
		TIOCGWINSZ = 1074295912L # Assume
	s = struct.pack('HHHH', 0, 0, 0, 0)
	x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s)
	return struct.unpack('HHHH', x)[0:2]


relayPassword = "*****"
serverHostArray = [
	{"host":"bjyz-888.epc.baidu.com","user":"work","password":"*****"},
	{"host":"bjhw-feed-8888.bjhw","user":"wuchengjin","password":""},
	{"host":"njjs-feed-8888.njjs","user":"wuchengjin","password":""},
	{"host":"szth-feed-8888.szth","user":"wuchengjin","password":""},
	{"host":"gzhl-feed-8888.gzhl","user":"wuchengjin","password":""},
	{"host":"bjhw-gh-8888.bjhw","user":"work","password":"888"},
	{"host":"njjs-gh-8888.njjs","user":"work","password":"888"},
]
serverIndex = 0

if __name__ == '__main__':
	# 通过spawn类启动和控制子应用程序
	child = pexpect.spawn('ssh relay.baidu-int.com')
	# 设置pexpect的窗口大小
	signal.signal(signal.SIGWINCH, sigwinch_passthrough)
	winsize = getwinsize();
	child.setwinsize(winsize[0], winsize[1])
	# child.logfile = sys.stdout
	while True:
		expectIndex = child.expect([
			"wuchengjin@relay.baidu-int.com's password:",
			"password:",
			"-bash-baidu-ssl"
		],)
		if expectIndex == 0:
			child.sendline(relayPassword)
		elif expectIndex == 1:
			child.sendline(serverHostArray[serverIndex]["password"])
			break
		elif expectIndex == 2:
			serverPasswordFlag = True;
			length = len(serverHostArray)
			lines = math.ceil(float(length) / 3)
			for line in range(int(lines)):
				for column in range(3):
					mat = "{:<5}\t{:<40}\t"
					index = int(lines) * column + line
					if index < length :
						print mat.format(index, serverHostArray[index]["host"]),
				print ""
			indexStr = raw_input('please select your server:')
			# 直接输入跳转host的
			if len(indexStr) > 10:
				child.sendline('ssh wuchengjin@' + indexStr)
				break;
			serverIndex = int(indexStr)
			print serverIndex, serverHostArray[serverIndex]["host"]
			child.sendline('ssh %s@%s' % (serverHostArray[serverIndex]["user"], serverHostArray[serverIndex]["host"]))
			if len(serverHostArray[serverIndex]["password"]) == 0:
				break
	print '登录成功';
	child.interact()
	print "程序退出"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨跳板机登陆服务器shell脚本 的相关文章

  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • sed 错误“未终止的 's' 命令”故障排除

    我正在构建一个script https stackoverflow com questions 4036832 replacing a specific term in an xml file其中 它将用文件夹路径替换 XML 文件中的模式
  • 在 iOS 模拟器中安装应用程序的脚本

    我正在尝试自动化构建应用程序 运行单元测试以及最终运行 UI 测试的过程 我正在通过命令行 xcodebuild sdk iphonesimulator6 0 在某个目录中构建应用程序 如何通过命令行 在 Library Applicati
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 通过 sed 使用 unix 变量将数据附加到每行末尾[重复]

    这个问题在这里已经有答案了 我有一个文件 我想使用 SED 将值附加到每行末尾的 unix 变量中 我已经通过 AWK 实现了这一点 但我想在 SED 中实现 像这样的东西 我已经尝试过以下命令 但它不起作用 sed i s BATCH R
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • shell中如何从数组中随机选择一个项目

    我正在 Shell 脚本中创建一个机器人 Array with expressions expressions Ploink Poink I Need Oil Some Bytes are Missing Poink Poink Piiii
  • Shell 脚本中的块注释

    有没有一种简单的方法可以注释掉 shell 脚本中的代码块 In bash bin bash echo before comment lt lt END bla bla blurfl END echo after comment The a
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件
  • GNU 并行与 rsync

    我正在尝试运行一些实例rsync并行使用ssh with GNU parallel 我正在运行的命令是这样的 find tmp tempfolder type f name chunck sort parallel gnu j 4 v ss
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • awk 返回两个变量

    现在这就是我正在做的事情 ret ls la awk print 3 9 usr echo ret awk print 1 fil echo ret awk print 2 问题是我没有运行ls我正在运行一个需要时间的命令 因此您可以理解其
  • shell解析json并循环输出组合变量

    杰斯克喜欢我之前的话题 https stackoverflow com questions 74063588 shell parsing json contains spaces in string 我知道如何解析带有空格的简单 json
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • PHP exec rm -Rf 不适用于子目录

    我试图删除特定文件夹中的所有内容 但它似乎不会影响子文件夹 但它应该 因为 bash 命令是从控制台执行的 system rm Rf some dir 该命令中不需要星号 如果要与文件一起删除目录 请同时删除斜杠 留下斜杠将删除文件 但保留
  • 在 C# 中编写批处理脚本的好方法是什么?

    我想用 C 编写简单的脚本 我通常会使用 bat 或 4NT btm 文件 复制文件 解析文本 询问用户输入等等 相当简单 但在批处理文件中正确执行这些操作确实很困难 例如没有例外 我熟悉像 AxScript 这样的命令行 脚本 包装器 这
  • 在 Shell 中提取匹配模式后的字符串

    如何提取 Shell 脚本中匹配模式后面的任何字符串 我知道 Perl 脚本中的此功能 但不知道 Shell 脚本中的功能 以下是示例 subject 01 这是一个示例主题 可能会有所不同 我必须提取 Subject 01 后面的任何字符
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可

随机推荐

  • Android PackageManagerService总结(五) APK卸载流程

    一 概述 PackageManagerService 简称PKMS xff0c 是Android系统中核心服务之一 xff0c 管理着所有与package相关的工作 xff0c 常见的比如安装 卸载应用 信息查询等工作 主要完成以下核心功能
  • ButterKnife内存泄漏问题

    在butterKnife自动生成的代码 xff08 XXX ViewBinding xff09 中 xff0c 里面有这样一段代码 xff1a view setOnClickListener new DebouncingOnClickLis
  • PPTV面试算法思考-最长对称子字符串

    题目 最近在微信公众号里看看到了一个PPTV的面试算法题 xff0c 感觉难度适中 xff0c 想试下 题目的内容为求一个字符串的最长对称子字符串 如 xff1a 输入 输出 abba 4 abad 3 acccbaa 3 我的算法1 自己
  • C++

    由于见到论坛上不少找书的 xff0c 于是就稍稍汇总总结了一下 xff0c 作为本人即将推出的 C 43 43 资源大汇 系列文章的引子 本文只是初稿 xff0c 其中有不少的纰漏 笔误 打误 xff08 打字错误 xff09 希望各位纠正
  • pyspark MLlib基本使用

    MLib 基本概念 MLib其实就是将数据以RDD的形式进行表示 xff0c 在分布式数据集上调用各种算法 使用方法 MLlib中包含能够在集群上运行良好的并行算法 xff0c 如kmeans 分布式RF 交替最小二乘等 xff0c 这能够
  • 一个启动模式为singleTop的activity,如果再次启动会发生什么? 面试官想问的是 onNewIntent()

    Activity有一个 onNewIntent Intent intent 回调方法 xff0c 该方法我们几乎很少使用 xff0c 导致已经将其忽略掉 该方法的官方解释如下 xff1a This is called for activit
  • c++ 中的重载全局new,delete

    最近做一个小项目 xff0c 对c 43 43 又有很多新的理解 实在不的不让人发出感叹 xff0c c 43 43 太强大了 xff0c 绝对不是一朝一夕就可以领悟她的内涵的 首先我们要清楚 xff0c 为什么我们要重载new xff0c
  • 解决AndroidStudio报错问题:Missing essential plugin

    前言 xff1a 今天下载了Android4 2 0Canary14最新版 xff0c 打开时突然报了一个错 xff0c 1 错误现象 xff1a AndroidStudio 无法正常打开 xff0c 打开之后弹出报错窗口显示 xff1a
  • java使用ftp上传文件出现false()

    http blog csdn net beyondlpf article details 9343781这是我解决的的原文地址解析原因 在项目中使用commons net jar实现FTP文件的下载 xff0c 在windows xp上运行
  • keil5在原有工程上修改工程名

    1 在工程文件目录中 xff0c 将1 uvoptx和1 uvprojx名字改成2 uvoptx和second uvprojx 2 其他1 uvoptx文件统统删除 3 打开second uvproj 4 点击 xff0c 在弹出的界面上
  • Systemd 入门教程:命令篇

    原文 xff1a http www ruanyifeng com blog 2016 03 systemd tutorial commands html 一 由来 历史上 xff0c Linux 的启动一直采用init进程 下面的命令用来启
  • 数据分位值计算shell脚本

    数据 sort n perl e 39 64 tp 61 500 75 9 97 99 995 999 64 l 61 lt gt for i 61 0 i lt 64 tp i 43 43 d 61 64 tp i printf 34 T
  • ssh服务器拒绝了密码 请再试一次

    可能原因是 xff1a 第一种情况 xff1a 可能是服务器的密钥改变了 xff0c 然后服务器内部的认证authorized keys变化了 xff0c 可以删除里边你的公钥 xff0c 再重新认证登录下试试 第二种情况 xff1a 21
  • win7频繁提示资源管理器已停止工作解决办法

    今天上班打开电脑 xff0c 总是弹出windows资源管理器已停止工作 xff0c 点击下方的 重新启动 xff0c 又恢复正常 xff0c 但是不一会出现这个问题 xff0c 如此反复 xff0c 差不多一分钟左右出现一次 xff0c
  • Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5

    Maven问题总结 xff1a Eclipse中项目右键菜单中点击Maven gt Update Projects时JDK被重置 Eclipse中在项目右键菜单点击 gt Maven gt Update Projects时 xff0c JD
  • tomcat 日志log4j,slf4j,logback冲突

    问题描述 xff1a 启动tomcat xff0c 发现tomcat无法启动 xff0c catalina out有如下错误日志 xff1a INFO localhost startStop 1 org apache catalina co
  • 详解软件项目管理流程的每一步

    一 项目启动 xff08 项目开工会 xff09 了解项目干系人及其利害关系 所有项目组成员是否到位 xff0c 如到位则拿到项目开发人员的简历 xff0c 详细了解每个开发人员的情况 xff08 可能会组织到客户方面试 xff09 根据项
  • 如何在 CentOS / RHEL 上设置 SSH 免密码登录

    前提配置 xff1a 使用root登录修改配置文件 xff1a etc ssh sshd config xff0c 将其中三行的注释去掉 xff0c 如下 xff1a 然后重启ssh服务 xff1a service sshd restart
  • 进阶问题

    1 用户态和内核态是什么 xff1f 区别在哪 xff1f 2 nginx为什么如此高效 xff1f 为什么http服务不采用nginx同样的策略 xff1f 3 一次完整的http请求的完整过程是什么 xff1f 七层协议每层做了什么 x
  • 跨跳板机登陆服务器shell脚本

    expect shell 自动越过跳板机登陆服务器 span class token comment usr bin expect f span span class token keyword set span password span