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