Python中如何实现远程控制另一台机器

问题是这样的:公司有一台机器 A 用于测试产品,放在测试的房间里,离我的位子有点远,每次跑来跑去不方便,我想在我位子上的电脑 B 上装一个 Python 脚本,每次在电脑 B 上运行脚本以后可以自动唤起电脑 A 运行程序(程序的接口已知),这两台电脑都在局域网里面,已知电脑 A 装的是 Windows7 系统,我电脑 B 上装的是 Ubuntu 系统。

我现在有两个想法:一是在我的电脑 B 上使用 ssh 远程登录控制电脑 A,但是这似乎需要电脑 A 新建一个 guest 账户?

二是在电脑 A 上开启并监听某个端口,我把调用命令发送到这个端口,电脑 A 监听到命令后就运行程序(这样似乎不需要给我分配一个用户密码)。

我不知道哪一种可行?我理想的方法是第二种,也许有更好的办法,请大家不吝赐教。

不必给出所有细节,只说说大概步骤就可以了。

还有,如果我想在手机上控制电脑 A 上的这个程序,应该如何做?
Python中如何实现远程控制另一台机器


21 回复

在 A 装一个 VNCserver,在 B 装 VNCclient


要实现远程控制另一台机器,Python有几个成熟的方案,核心思路都是在目标机器上运行一个服务端程序,在控制端运行客户端程序。

最直接的方法是使用Python标准库socket创建自定义的C/S架构。下面是一个简单的例子,服务端在目标机器上执行接收到的命令:

1. 目标机器(被控端) - server.py

import socket
import subprocess
import sys

def run_server(host='0.0.0.0', port=5000):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(1)
    print(f"[*] 监听 {host}:{port}")
    
    client_socket, addr = server_socket.accept()
    print(f"[+] 来自 {addr} 的连接")
    
    while True:
        try:
            # 接收命令
            command = client_socket.recv(1024).decode('utf-8').strip()
            if not command or command.lower() == 'exit':
                break
            
            # 执行命令
            result = subprocess.run(command, shell=True, 
                                  capture_output=True, text=True)
            output = result.stdout + result.stderr
            
            # 发送结果
            client_socket.sendall(output.encode('utf-8'))
            
        except Exception as e:
            error_msg = f"执行错误: {str(e)}"
            client_socket.sendall(error_msg.encode('utf-8'))
    
    client_socket.close()
    server_socket.close()

if __name__ == "__main__":
    run_server()

2. 控制端 - client.py

import socket

def run_client(server_ip, port=5000):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((server_ip, port))
    
    while True:
        command = input("shell> ")
        if not command:
            continue
        
        client_socket.sendall(command.encode('utf-8'))
        
        if command.lower() == 'exit':
            break
        
        # 接收结果
        data = client_socket.recv(4096).decode('utf-8')
        print(data)
    
    client_socket.close()

if __name__ == "__main__":
    run_client('192.168.1.100')  # 替换为目标机器IP

更成熟的方案:

  • Paramiko:基于SSH的库,更安全
  • Fabric:简化了SSH操作和部署
  • RPC框架:如xmlrpcgrpc,适合复杂操作

简单来说,选Paramiko做安全的SSH控制,用socket写简单的自定义协议。

A 上提供 HTTP 接口?

A 开 3389 远程,B 安装 rdesktop 连接,就是这么简单

我之前类似的需要是用 python 写的 rpc,因为有一个 js 编译器只有 win 版本,我日常用 a 机器是 linux,公司内网有台 win 服务器 b,使用的时候 a 给 b 发命令并发送源代码,b 编译好后 a 直接拿到编译结果……

teamviewer 那么好用

你没用过 rdesktop 吗?

teamviewer 啊,操作简单,方便,手机也有 app

已更新为 freerdp

teamviewer 有些问题
vnc 不加密

jenkins ?

系统属性里可以设置允许接收远程控制
我的电脑右键属性高级属性

你不知道有个东西叫远程桌面么。

向日葵不错的。

N 年前的鸽子,任我行

jenkins buildbot 之类的不行吗?

跨平台直接 vnc 省时间

配个秘书,你在后面指挥她操作,233333333333333

remote desktop 确实是王道。

teamviewer VNC 甚至搞个 IPAD 装个微软的桌面远程 完美

A 里装 ssh 服务器( openssh ( cygwin ) 或 freesshd 或 Bitvise SSH Server(商业))

回到顶部