什么是ssh?
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。
远程执行命令后如何拿到执行结果?
可以使用subprocess模块,subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
需求:我想用python语句查看我Windows系统的本地网卡ip信息(ipconfig命令)。
import subprocess
obj = subprocess.Popen("ipconfig",shell=True,
stdout=subprocess.PIPE, # 正确结果丢到这个“管道”中
stderr=subprocess.PIPE) # 错误结果丢入这个“管道”
print(obj)
# linux操作系统默认用utf-8编码
# windows操作系统默认用gbk编码
print("stdout 1——>",obj.stdout.read().decode("gbk"))
print("stderr 1——>",obj.stderr.read().decode("gbk"))
控制台已成功打印本地网卡ip信息。
代码演示
服务端代码
import socket
import subprocess
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(("127.0.0.1",8080))
phone.listen(5)
print("starting...")
while True:
conn,client_addr = phone.accept()
print(client_addr)
while True:
# 1、收命令
cmd = conn.recv(1024)
if not cmd:break
# 2、执行命令,拿到结果 ——> 返回的就是我windows系统上面执行命令收到的结果
obj = subprocess.Popen(cmd.decode("utf-8"), shell=True,
stdout=subprocess.PIPE, # 正确结果丢到这个“管道”中
stderr=subprocess.PIPE) # 错误结果丢入这个“管道”
stdout = obj.stdout.read()
stdeer = obj.stderr.read()
# 3、把命令的结果返回给客户端
# + 涉及效率问题,它会申请一个新的内存空间
# + 是一个可以优化的地方,后面会学到
conn.send(stdout+stdeer)
conn.close()
phone.close()
客户端代码
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8080))
while True:
# 1、发命令
cmd = input(">>:").strip()
if not cmd:continue
phone.send(cmd.encode("utf-8"))
# 2、拿到命令的结果,并打印
# 服务端回应的数据大小有可能超过1024字节
# 1024的坑后面来填
data=phone.recv(1024)
print(data.decode("gbk"))
phone.close()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122902.html