当前位置: 首页 > news >正文

使用Python来写模拟Xshell实现远程命令执行与交互

一、模块

这里使用的是

paramiko带三方库
pip install paramiko

二、效果图

三、代码实现(这里的IP,用户名,密码修改为自己对应服务器的)

import paramiko
import timeclass Linux(object):# 参数初始化def __init__(self, ip, username, passwd, timeout=30):self.ip = ipself.username = usernameself.passwd = passwdself.timeout = timeoutself.t = ''self.chan = ''self.try_times = 3# 创建连接def connect(self):while True:try:self.t = paramiko.Transport(sock=(self.ip, 22))self.t.connect(username=self.username, password=self.passwd)self.chan = self.t.open_session()self.chan.settimeout(self.timeout)self.chan.get_pty()self.chan.invoke_shell()print(f'{self.ip}连接成功。',end='')# print('接收到的网络数据解码为str')# print(self.chan.recv(65535).decode('utf-8'))returnexcept Exception as e:if self.try_times != 0:print('连接失败正在重试!')self.try_times -= 1else:print('重试3次连接失败程序结束。')exit(1)# 关闭连接def close(self):self.chan.close()self.t.close()def send_command(self, cmd):  # 重命名方法为send_commandcmd += '\r'result = ''# 发送命令self.chan.send(cmd)  # 修改此处为self.chan.send(cmd)# 回显很长的命令可能要执行很久,通过循环分批次回显,执行成功返回true,失败falsewhile True:time.sleep(0.5)ret = self.chan.recv(65535)ret = ret.decode('utf-8')result += retreturn resultif __name__ == '__main__':host = Linux('192.168.12.155', 'root', '6663614lcx')host.connect()adsl = host.send_command('adsl-start')  # 发送一个拨号指令result = host.send_command('whoami')  # 查看IP的命令getname = result.split('\r')name = getname[-1]while True:a = input(name)if a =='Q':breakresult = host.send_command(a)  # 查看IP的命令info = result.split('\r')t = info[-1]result=result.replace(t,'')result = result.replace(a, '')print(result,end='')name=info[-1]host.close()

http://www.lryc.cn/news/169461.html

相关文章:

  • mybatis 数据库字段为空or为空串 忽略条件过滤, 不为空且不为空串时才需nameParam过滤条件
  • 【玩玩Vue】通过vue-store实现枚举管理,用于下拉选项和中英文翻译等
  • ISCSI:后端卷以LVM 的方式配置 ISCSI 目标启动器
  • 八公山豆腐发展现状与销售对策研究
  • 排序算法-插入排序
  • 多位数按键操作(闪烁)数码管显示
  • MyEclipse项目导入与导出
  • ArrayList和LinkedList
  • Linux 配置 Nginx 服务完整详细版
  • Python实现猎人猎物优化算法(HPO)优化LightGBM回归模型(LGBMRegressor算法)项目实战
  • 无涯教程-JavaScript - ODD函数
  • Easyui里的datagrid嵌入select下拉框
  • 计算机专业毕业设计项目推荐03-Wiki系统设计与实现(JavaSpring+Vue+Mysql)
  • 微服务的艺术:构建可扩展和弹性的分布式应用
  • 在PHP8中对数组进行排序-PHP8知识详解
  • Redis混合模式持久化原理
  • 《BPF Performance Tools —— 洞悉Linux系统和应用性能》学习笔记 —— 第一章 介绍(2)
  • 【计算机网络】网络编程接口 Socket API 解读(7)
  • crypto++下载、安装(VS2017)及加解密使用
  • R语言画图
  • redis 核心数据结构
  • RabbitMQ消息可靠性(一)-- 生产者消息确认
  • 9 种方法使用 Amazon CodeWhisperer 快速构建应用
  • 性能测试-性能工程落地的4个阶段(21)
  • 小程序 navigateBack 携带参数返回的三种方式(详细)
  • 通过内网穿透实现远程连接群晖Drive,轻松实现异地访问群晖NAS
  • vue3 + vite常用工具
  • Vue框架分享与总结
  • 声音生成评价指标——使用声音分类模型评价生成声音质量(基于resnetish、VGGish、AlexNet)
  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 六)