设为首页 加入收藏

TOP

Python之路:堡垒机实例(三)
2017-09-30 17:39:55 】 浏览:10160
Tags:Python 之路 堡垒 实例
####
 
chan.close()
tran.close()
 1 while True:
 2     # 监视用户输入和服务器返回数据
 3     # sys.stdin 处理用户输入
 4     # chan 是之前创建的通道,用于接收服务器返回信息
 5     readable, writeable, error = select.select([chan, sys.stdin, ],[],[],1)
 6     if chan in readable:
 7         try:
 8             x = chan.recv(1024)
 9             if len(x) == 0:
10                 print '\r\n*** EOF\r\n',
11                 break
12             sys.stdout.write(x)
13             sys.stdout.flush()
14         except socket.timeout:
15             pass
16     if sys.stdin in readable:
17         inp = sys.stdin.readline()
18         chan.sendall(inp)
肆意妄为方式一
# 获取原tty属性
oldtty = termios.tcgetattr(sys.stdin)
try:
    # 为tty设置新属性
    # 默认当前tty设备属性:
    #   输入一行回车,执行
    #   CTRL+C 进程退出,遇到特殊字符,特殊处理。

    # 这是为原始模式,不认识所有特殊符号
    # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
    tty.setraw(sys.stdin.fileno())
    chan.settimeout(0.0)

    while True:
        # 监视 用户输入 和 远程服务器返回数据(socket)
        # 阻塞,直到句柄可读
        r, w, e = select.select([chan, sys.stdin], [], [], 1)
        if chan in r:
            try:
                x = chan.recv(1024)
                if len(x) == 0:
                    print '\r\n*** EOF\r\n',
                    break
                sys.stdout.write(x)
                sys.stdout.flush()
            except socket.timeout:
                pass
        if sys.stdin in r:
            x = sys.stdin.read(1)
            if len(x) == 0:
                break
            chan.send(x)

finally:
    # 重新设置终端属性
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
肆意妄为方式二
 1 def windows_shell(chan):
 2     import threading
 3 
 4     sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")
 5 
 6     def writeall(sock):
 7         while True:
 8             data = sock.recv(256)
 9             if not data:
10                 sys.stdout.write('\r\n*** EOF ***\r\n\r\n')
11                 sys.stdout.flush()
12                 break
13             sys.stdout.write(data)
14             sys.stdout.flush()
15 
16     writer = threading.Thread(target=writeall, args=(chan,))
17     writer.start()
18 
19     try:
20         while True:
21             d = sys.stdin.read(1)
22             if not d:
23                 break
24             chan.send(d)
25     except EOFError:
26         # user hit ^Z or F6
27         pass
肆意妄为方式三

注:密码验证 t.auth_password(username, pw)

详见:paramiko源码demo

   
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python-Day4 Python基础进阶之生.. 下一篇简明Python教程自学笔记——命令..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目