Python 模拟ssh远程

本文介绍了一个基于Python实现的客户端和服务端系统,该系统能够跨Windows和Linux平台执行命令并获取结果。通过socket通信,客户端可以发送命令到服务端,服务端执行后返回结果。系统支持GBK和UTF-8编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统命令

windows 编码gbk
linux utf-8

#执行系统命令,并且拿到命令的结果
# import os
# res=os.system('xxxxlxxxs /')
# print('命令的结果是:',res)
# 0是成功
#非零是不成功
 
import subprocess
#我启动shell解释器
#正确结果stdout   错误结果stderr   管道 stdout=subprocess.PIPE
obj=subprocess.Popen('ls /',shell=True,
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE)

客户端

#_*_coding:utf-8_*_
import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.connect(('127.0.0.1',9901))

while True:
    #1、发命令
    cmd=input('>>: ').strip() #ls /etc
    if not cmd:continue
    phone.send(cmd.encode('utf-8'))

    #2、拿命令的结果,并打印
    data=phone.recv(1024) #1024是一个坑
    print(data.decode('utf-8'))

phone.close()

服务端

#_*_coding:utf-8_*_
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',9901)) #0-65535:0-1024给操作系统使用
phone.listen(5)

print('starting...')
while True: # 链接循环
    conn,client_addr=phone.accept()
    print(client_addr)

    while True: #通信循环
        try:
            #1、收命令
            cmd=conn.recv(1024)
            if not cmd:break #适用于linux操作系统

            #2、执行命令,拿到结果
            obj = subprocess.Popen(cmd.decode('utf-8'), shell=True,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)

            stdout=obj.stdout.read()
            stderr=obj.stderr.read()

            #3、把命令的结果返回给客户端
            print(len(stdout)+len(stderr))
            conn.send(stdout+stderr) #+是一个可以优化的点

        except ConnectionResetError: #适用于windows操作系统
            break
    conn.close()

phone.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值