Python中如何实现远程控制另一台机器
问题是这样的:公司有一台机器 A 用于测试产品,放在测试的房间里,离我的位子有点远,每次跑来跑去不方便,我想在我位子上的电脑 B 上装一个 Python 脚本,每次在电脑 B 上运行脚本以后可以自动唤起电脑 A 运行程序(程序的接口已知),这两台电脑都在局域网里面,已知电脑 A 装的是 Windows7 系统,我电脑 B 上装的是 Ubuntu 系统。
我现在有两个想法:一是在我的电脑 B 上使用 ssh 远程登录控制电脑 A,但是这似乎需要电脑 A 新建一个 guest 账户?
二是在电脑 A 上开启并监听某个端口,我把调用命令发送到这个端口,电脑 A 监听到命令后就运行程序(这样似乎不需要给我分配一个用户密码)。
我不知道哪一种可行?我理想的方法是第二种,也许有更好的办法,请大家不吝赐教。
不必给出所有细节,只说说大概步骤就可以了。
还有,如果我想在手机上控制电脑 A 上的这个程序,应该如何做?
Python中如何实现远程控制另一台机器
在 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框架:如
xmlrpc或grpc,适合复杂操作
简单来说,选Paramiko做安全的SSH控制,用socket写简单的自定义协议。
A 上提供 HTTP 接口?
我之前类似的需要是用 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 装个微软的桌面远程 完美


