day26-3 模拟ssh远程执行命令

模拟ssh远程执行命令

实现在客户端输入执行命令后,返回执行命令的信息。如输入dir,显示当前目录下的所有文件和文件夹

服务器

import socket
import subprocess

# 生成服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定端口
server.bind(('127.0.0.1', 8000))

# 监听端口
server.listen(5)

print('start...')

# 链接循环
while True:
    # 等待客户端连接
    conn, client_addr = server.accept()

    # 通信循环
    while True:
        try:
            # 接收客户端发来的消息
            cmd = conn.recv(1024)
            print('来自客户端的数据:', cmd)

            # 帮你执行cmd命令,然后把执行后的结果放到管道里
            pipeline = subprocess.Popen(cmd.decode('utf8'),
                                        shell=True,
                                        stderr=subprocess.PIPE,  # 把标准错误放到管道里去
                                        stdout=subprocess.PIPE)  # 把正确的信息放到管道里去

            stderr = pipeline.stderr.read()
            stdout = pipeline.stdout.read()

            conn.send(stderr + stdout)

        except ConnectionResetError:
            break

客户端

import socket

# 创建客户端
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 连接服务端端口
client.connect(('127.0.0.1', 8000))

while True:
    # 发送消息
    cmd = input('please enter msg>>>')
    client.send(cmd.encode('utf8'))
    
    # 接收消息
    data = client.recv(1024)
    print(data.decode('gbk'))

猜你喜欢

转载自www.cnblogs.com/863652104kai/p/11093262.html