#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()
window平臺上基於python搭建一個堡壘級系統
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.