linux 多主机间快速跳转脚本

#!/usr/bin/env python
#coding=utf8

'''
用于多机器间相互跳转,如有新机器加入,需要更新ip_list文件
'''

from prettytable import PrettyTable
from sh import cat
import os
import re

class GO():

    def __init__(self):
        self.base_path = "/home/xxx/"
        self.ip_list = (cat(self.base_path + "ip_list")).split("#")

    def servers_ip_list(self):
        infos  = []
        self.ip_list.remove("\n")
        for i in self.ip_list:
            print i
            info = {}
            info["lan_ip"] = i.split("|")[2]
            info["wan_ip"] = i.split("|")[1]
            info["modules"] = i.split("|")[0]
            infos.append(info)

    print infos
        return infos

    def go(self):
        servers_ip_list = self.servers_ip_list()
        infos = PrettyTable(["编号", "模块名称", "内网ip", "外网ip"])
        infos.align = "l"

        for index,i in enumerate(servers_ip_list, 1):
            if i["modules"] != "":
                infos.add_row([index, i["modules"], i["lan_ip"], i["wan_ip"]])
        print infos
        in_ip = raw_input("请输入内网IP或编号,进行连接 :")

        # 如果输入的是编号, 需要先查询对应IP
        if not re.match(r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$", in_ip):
            if int(in_ip) <= len(servers_ip_list) and int(in_ip) > 0:
                in_ip = servers_ip_list[int(in_ip)-1]["lan_ip"]
            else:
                print "ip_list文件中没有该主机信息, 请更新"
                exit(1)

        for i in self.ip_list:
            if in_ip == i.split("|")[2]:
                try:
                    port = i.split("|")[3]
                except Exception:
                    print "ip_list文件没有该主机对应的端口, 请更新"
                    exit(1)

        cmd = "ssh -p %s -o 'StrictHostKeyChecking no' %s" % (port, in_ip)
        os.system(cmd)

if  __name__ == "__main__":
    go = GO()
    go.go()

  • ip_list文件
test-1|12.12.12.12|10.10.10.10|22#test-2|12.12.12.13|10.10.10.11|22#test-3|12.12.12.14|10.10.10.12|22#
posted @ 2019-06-21 10:08  remainsu  阅读(450)  评论(0编辑  收藏  举报