シミュレーションsshリモート実行コマンド

1507 ワード

目次
  • 一、サービス側
  • 二、クライアント
  • 一、サービス端
    from socket import *
    import subprocess
    
    server = socket(AF_INET, SOCK_STREAM)
    
    server.bind(('127.0.0.1', 8000))
    server.listen(5)
    
    print('start...')
    while True:
        conn, client_addr = server.accept()
    
        while True:
            print('from client:', client_addr)
    
            cmd = conn.recv(1024)
            if len(cmd) == 0: break
            print('cmd:', cmd)
    
            obj = subprocess.Popen(cmd.decode('utf8'),  #    cmd  
                                   shell=True,  #   shell  
                                   stderr=subprocess.PIPE,  #          ,    
                                   stdout=subprocess.PIPE)  #          ,    
    
            stdout = obj.stdout.read()  #       
            stderr = obj.stderr.read()  #       
    
            conn.send(stdout)
            conn.send(stderr)
    
        conn.close()
    
    server.close()
    

    二、クライアント
    import socket
    
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    client.connect(('127.0.0.1', 8000))
    
    while True:
        data = input('please enter your data')
        client.send(data.encode('utf8'))
        data = client.recv(1024)
    
        print('from server:', data)
    
    client.close()
    dirコマンドが入力され、サービス側が1024バイト未満のバイトを送信するため、クライアントは受け入れることができる.tasklistコマンドを入力します.サービス側が1024バイト以上を送信するため、クライアントはデータの一部しか受け入れません.また、dirコマンドを再入力すると、クライアントはdirコマンドの結果を受信しますが、前回の残りの未送信データが印刷されます.これがパッケージの問題です.