paramiko修改本分源码

Posted Bigberg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了paramiko修改本分源码相关的知识,希望对你有一定的参考价值。

一、获取paramiko源码

  环境:Python3

  下载地址:https://github.com/paramiko/paramiko

  使用的是 demos这个文件夹

二、修改部分源码用以登入

  2.1 windwos使用paramiko

  切换到demos文件夹下 

G:\\python\\untitled\\study13\\demos>python demo.py


#报错
File "G:\\python\\untitled\\study13\\demos\\interactive.py", line 84, in writeall
sys.stdout.write(data)

TypeError: write() argument must be str, not bytes


# python3中socket传输是bytes类型,而这边接收的是str类型

  修改报错的  interactive.py , line 84

    def writeall(sock):
        while True:
            data = sock.recv(256)
            if not data:
                sys.stdout.write(\'\\r\\n*** EOF ***\\r\\n\\r\\n\')
                sys.stdout.flush()
                break
            sys.stdout.write(data.decode())  # 将原本的data 解码
            sys.stdout.flush()

# data.decode() 即可

  改完之后,输入ip 和 密码可以登入了

  

 

 三、修改部分源码以记录输入的命令

  从上图可以看出,通过paramiko中的demo.py 连接服务器,执行的命令是从“Here we go” 后面正式开始的,也就是在此之后的命令是通过paramiko封装的,用以发往不同的服务器。所以我们需要找到这个位置,查看它们的源码。

 chan = t.open_session()
    chan.get_pty()
    chan.invoke_shell()
    print(\'*** Here we go!\\n\')
    interactive.interactive_shell(chan)
    chan.close()
    t.close()


# 可以看到  print(\'*** Here we go!\\n\') 后面
# 运行的一个函数 interactive.interactive_shell(chan)
# 所以要去看这个函数写的什么

  修改interactive_shell(chan) 中 posix_shell(chan)函数, 以记录所有输入的字符(命令)

        cmd = []  # 定义一个空列表,记录所有输入的字符
        while True:
            r, w, e = select.select([chan, sys.stdin], [], [])
            if chan in r:
                try:
                    x = u(chan.recv(1024))
                    if len(x) == 0:
                        sys.stdout.write(\'\\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
                if x == "\\r":   # 回车表示一条命令输入完成
                    cmd_str = "".join(cmd)  # 拼接命令
                    print(\'\\n\' + \'-->\' + cmd_str)
                    cmd = []  # 清空cmd列表
                else:
                    cmd.append(x)  # 记录输入的字符
                chan.send(x)

    finally:
        termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

  在linux服务器上测试

  

  这样输入的命令已经可以看到了。

 

以上是关于paramiko修改本分源码的主要内容,如果未能解决你的问题,请参考以下文章

python模块-paramiko-修改源码(demo实例)

更改paramiko 源码 记录命令实现堡垒机功能

《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段

源码安装python paramiko module

Python:跳板机审计服务器

使用paramiko模块批量修改Linux主机的密码