window平臺上基於python搭建一個堡壘級系統

#coding=utf-8
import getpass,select,socket,sys  
import paramiko,logging

logging.basicConfig(level=logging.DEBUG, filename='bastion.log',
          format='%(asctime)s - %(levelname)s: %(message)s')
# 定義一個Handler打印INFO及以上級別的日誌到sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
# 設置日誌打印格式
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
# 將定義好的console日誌handler添加到root logger
logging.getLogger('').addHandler(console) 


user =raw_input('username:')
pwd =getpass.getpass('password')
dic ={'pi': ['192.168.1.105','c10.puppet.com','c11.puppet.com',],'eric': ['c100.puppet.com',]}
if user =='pi'and pwd =='123':
    logging.info('登陸成功')
    if dic.get(user,''):
        print(dic.get(user,''))
        NO=raw_input('選擇ip對應NO:')
    else:
        print('你還沒有訪問資源,聯繫管理員添加')
        sys.exit()    
else:
    logging.info('登陸失敗')
    sys.exit()

#主機ip 端口
hostname ='192.168.1.105'
port =22

tran =paramiko.Transport((hostname, port,))
tran.start_client()
#windows上的私鑰
default_path='C:\Users\zhouzw\Downloads\id_rsa'
key =paramiko.RSAKey.from_private_key_file(default_path)
tran.auth_publickey('pi', key)
# 打開一個通道
chan =tran.open_session()
# 獲取一個終端
chan.get_pty()
# 激活器
chan.invoke_shell()

##########
def windows_shell(chan):
    import threading

    sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")

    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                logging.info(data)
                sys.stdout.write('\r\n*** EOF ***\r\n\r\n')
                sys.stdout.flush()
                break
            sys.stdout.write(data)
            sys.stdout.flush()

    writer = threading.Thread(target=writeall, args=(chan,))
    writer.start()

    try:
        while True:
            d = sys.stdin.read(1)
            if not d:
                break
            print d    
            logging.info(d)    
            chan.send(d)
    except EOFError:
        # user hit ^Z or F6
        pass

windows_shell(chan)
#########
chan.close()
tran.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章