模拟ssh远程执行命令

模拟ssh远程执行命令

即使用pycharm运行cmd命令,返回相应的结果

服务端

import socket
import subprocess
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))
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).decode('gbk')

    print('from server:', data)

client.close()

需要注意的是windows默认编码为gbk,所以在客户端解码的时候需要使用gbk编码进行解码

posted @ 2019-06-27 16:45  Firekeeper  阅读(321)  评论(1)    收藏  举报