102 模拟ssh远程执行命令
目录
- 一、subprocess模块
- 1.1 使用方法
- 二、模拟实现SSH远程执行命令
- 服务器
- 客户端
一、subprocess模块
subprocess 模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。更多查看官网:https://docs.python.org/2/library/subprocess.html?highlight=subprocess#frequently-used-arguments
可以通过subprocess 模块去执行命令
1.1 使用方法
执行命令,把执行的正确结果放到管道中,把执行错误的结果也放到管道中
obj=subprocess.Popen(命令, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
注意:的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码,正所谓用什么格式编码就用什么格式解码
# subprocess 执行系统命令的模块
import subprocess
# 把执行的正确结果放到管道中
obj=subprocess.Popen('tasklist',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#拿到正确结果的管道,读出里面的内容
ss=obj.stdout.read()
err=obj.stderr.read()
print('错误信息',str(err,encoding='gbk'))
#因为windows用的gbk编码,用gbk解码
print(str(ss,encoding='gbk'))
二、模拟实现SSH远程执行命令
服务器
import socket
import subprocess
HOST = "192.168.11.237"
PORT = 8081soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.bind((HOST,PORT))
soc.listen(5)while 1:print("等待连接。。。")conn,addr = soc.accept()print("连接成功。。。\n")while 1:try:data = conn.recv(1024)if len(data)==0: # 长度0说明断开了连接。在windows中没用,在linux中才有用break# 把执行正确的内容放到管道中obj = subprocess.Popen(str(data,encoding="utf8"),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)# 执行的结果 b 格式,gbk编码(windows平台)suc_msg = obj.stdout.read()if suc_msg:conn.send(suc_msg)else:fail_msg = obj.stderr.read()conn.send(fail_msg)except:print("客户机连接中断。。。")breakconn.close()soc.close()
客户端
import socket
HOST = "192.168.11.237"
PORT = 8081soc = socket.socket()
soc.connect((HOST,PORT))while 1:cmd = input("请输入需要执行的命令")soc.send(cmd.encode("utf8"))data = soc.recv(1024)print(data.decode("gbk"))
输入dir
命令,由于服务端发送字节少于1024字节,客户端可以接受。
输入tasklist
命令,由于服务端发送字节多于1024字节,客户端只接受部分数据,并且当你再次输入dir
命令的时候,客户端会接收dir
命令的结果,但是会打印上一次的剩余未发送完的数据,这就是粘包问题。
转载于:https://www.cnblogs.com/XuChengNotes/p/11478835.html
102 模拟ssh远程执行命令相关推荐
- day26-3 模拟ssh远程执行命令
目录 模拟ssh远程执行命令 服务器 客户端 模拟ssh远程执行命令 实现在客户端输入执行命令后,返回执行命令的信息.如输入dir,显示当前目录下的所有文件和文件夹 服务器 import socket ...
- 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现
立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...
- linux 带环境变量 远程执行,SSH远程执行命令环境变量问题
SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...
- 解决SSH远程执行命令找不到环境变量的问题
解决SSH远程执行命令找不到环境变量的问题 参考文章: (1)解决SSH远程执行命令找不到环境变量的问题 (2)http://www.cnblogs.com/zhenyuyaodidiao/p/928 ...
- 【linux】ssh 远程执行命令
1.概述 转载并且补充:ssh 远程执行命令 SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操 ...
- SSH远程执行命令环境变量问题
SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec][-D [bind_address:] ...
- ssh远程执行命令 linux,Linux下使用SSH远程执行命令方法收集
说明:可以做SSH免密登录之后执行,这样可以省去每次执行输入密码的提示. 对于简单的命令: 如果是简单执行几个命令,则: ssh user@remoteNode "cd /home ; ls ...
- 关于ssh远程执行命令出现xxx: command not found问题
最初是在虚拟机搭建Hadoop3.x集群,使用命令ssh hadoop001 jps,出现: bash: jps: command not found 但是单独测试jps命令和先ssh登录再测试jps ...
- 【linux】ssh 远程执行命令自动输入密码方式
ssh 远程执行命令自动输入密码方式 场景: 由于多台机必须要登陆执行命令,需要使用密钥一台台登录,所以每次登陆机器的时候都需要手动输入域账号密码.密码太长且复杂,手动输入容易输错,故使用脚本来做这个 ...
- 远程启动hadoop,ssh远程执行命令报错!hdfs命令不存在!
1.任务:远程启动hadoop集群. #!/usr/bin/env bash HADOOP_HOME=/root/hadoop/hadoop-3.3.2 if [ $# -lt 1 ] thenech ...
最新文章
- 偷盖茨、奥巴马 Twitter 的黑客被抓了,年轻到你想不到!
- How Does Maven Work
- Jquery--遮罩弹窗特效
- 转载:赶集网部门老大回应热帖《我在赶集网的两个月》
- Android注解使用之ButterKnife 8.0注解使用介绍
- Pod定义YAML文件详解
- C# Thread开启线程几种方式
- try catch线程问题???
- 【OpenGL】顶点变换常用函数总结
- CUDA C程序中的函数类型
- CSS布局与表格布局之我见 [2007年8月3日]
- 常用MIME类型(Flv,Mp4的mime类型设置)(转载)
- 热启动计算机的快捷键,电脑快捷键的用法
- [PTA]7-116 计算圆周率(c语言)(学习记录)
- 高德地图根据经纬度获取详细地址
- 2021年危险化学品经营单位安全管理人员报名考试及危险化学品经营单位安全管理人员考试资料
- 华为交换机console口密码配置
- 福昕阅读器无法注释问题
- js html 图片 缓存问题,如何防止浏览器缓存CACHE?将CSS、JS、图片加上参数
- 2011年4月全球企业市值排名前100
热门文章
- nsinteger转float_int、NSInteger、NSNumber和NSString以及相互转换
- Unity3D(七)声音
- java常用api-字符串
- Matter-JS collisionFilter 碰撞过滤器
- python接口在哪里_在Python中实现接口?
- Redis主从配置,哨兵,集群的设计原理
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_7_练习_对文本的内容进行排序...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_4_练习_递归打印多级目录...
- python编程系列---global的使用注意点
- 20165204Java第四周学习