如何用 Python 远程控制 Windows 服务器?

鼠扑  金牌会员 | 2024-7-22 20:36:55 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 577|帖子 577|积分 1731

各人好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

在信息期间的洪流中,把握一门编程语言已经成为一项必备技能。Python,这门以简洁、易学、强大著称的编程语言,更是成为无数开发者的大宝剑。本日,我们要探讨的就是如何用 Python 远程控制 Windows 服务器。
  
  
一、准备工作

开篇小故事
故事要从一只猫提及。
小明是一名 Python 开发者,他有一只聪明的小猫咪叫“皮皮”。有一天,小明正在服务器上部署项目,忽然想起忘记喂皮皮了。但他又不想脱离电脑去喂猫,于是他突发奇想:假如能远程控制家里的自动喂食器该多好!
于是,他决定用 Python 远程控制家里的 Windows 服务器,毗连到自动喂食器上。经过一番努力,小明不仅成功实现了这个目标,还发现了 Python 远程控制 Windows 服务器的无限大概。


准备工作
在正式开始之前,我们须要做一些准备工作。起首,确保你的 Windows 服务器已经开启远程桌面服务(RDP)。接着,我们须要安装一些须要的库:
  1. pip install pywinrm paramiko pypsexec
复制代码
这些库分别用于差别的远程控制方法,我们会在后续的示例中逐一先容它们。



二、编程示例

示例一:利用 PyWinRM 远程执行下令
PyWinRM 是一个功能强大的库,可以让我们通过 WinRM(Windows 远程管理)协议来远程执行下令。先来看看如何用它在远程服务器上执行一条简朴的下令:
  1. import winrm
  2. # 连接到远程Windows服务器
  3. session = winrm.Session('http://<你的服务器IP>:5985/wsman', auth=('用户名', '密码'))
  4. # 执行命令
  5. result = session.run_cmd('ipconfig')
  6. # 打印输出
  7. print(result.std_out.decode('utf-8'))
复制代码
这个示例非常简朴,现实上却非常强大。我们通过 winrm.Session 创建了一个与远程服务器的会话,然后利用 run_cmd 方法在服务器上执行了 ipconfig 下令,并打印了输出结果。你可以尝试更换其他下令,看看结果如何。

Github 项目地点:
   https://github.com/diyan/pywinrm
  
示例二:利用 Paramiko 进行 SSH 毗连
虽然 Windows 默认没有 SSH 服务,但你可以安装 OpenSSH Server 来实现 SSH 毗连。安装完成后,我们就可以用 Paramiko 来实现远程控制了:
  1. import paramiko
  2. # 创建SSH客户端
  3. client = paramiko.SSHClient()
  4. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  5. # 连接到远程服务器
  6. client.connect('你的服务器IP', username='用户名', password='密码')
  7. # 执行命令
  8. stdin, stdout, stderr = client.exec_command('ipconfig')
  9. # 打印输出
  10. print(stdout.read().decode())
  11. # 关闭连接
  12. client.close()
复制代码
通过这个示例,我们可以看到利用 Paramiko 进行 SSH 毗连也黑白常简朴的。只需创建一个 SSH 客户端,毗连到远程服务器,然后执行下令并获取输出。这个方法尤其实用于那些已经习惯利用 SSH 的开发者。

Github 项目地点:
   https://github.com/paramiko/paramiko
  
示例三:利用 PsExec 执行高级使命
PsExec 是一个下令行工具,可以让你在远程计算机上执行进程,并与它们交互。通过 pypsexec 库,我们可以在 Python 中方便地利用 PsExec:
  1. from pypsexec.client import Client
  2. # 创建PsExec客户端
  3. client = Client('你的服务器IP', username='用户名', password='密码')
  4. # 连接到远程服务器
  5. client.connect()
  6. # 开启服务
  7. client.create_service()
  8. # 执行命令
  9. stdout, stderr, rc = client.run_executable('cmd.exe', arguments='/c ipconfig')
  10. # 打印输出
  11. print(stdout.decode())
  12. # 关闭服务并断开连接
  13. client.remove_service()
  14. client.disconnect()
复制代码
这个示例展示了如何通过 PsExec 在远程服务器上执行下令,并获取输出结果。PsExec 不仅可以执行简朴下令,还可以运行复杂的脚本和应用程序。

Github 项目地点:
  1. https://github.com/jborean93/pypsexec
复制代码

示例四:定时使命与自动化
假如你希望定期在远程服务器上执行某些使命,比如清理日记文件或备份数据,你可以联合 Python 的 sched 模块和前面的远程执行方法,实现自动化脚本:
  1. import time
  2. import sched
  3. import winrm
  4. # 创建调度器
  5. scheduler = sched.scheduler(time.time, time.sleep)
  6. # 定义任务
  7. def clear_logs():
  8.     session = winrm.Session('http://<你的服务器IP>:5985/wsman', auth=('用户名', '密码'))
  9.     result = session.run_cmd('del C:\\logs\\*.log')
  10.     print(result.std_out.decode('utf-8'))
  11. # 安排任务每隔一天执行一次
  12. scheduler.enter(86400, 1, clear_logs)
  13. # 开始运行调度器
  14. scheduler.run()
复制代码
这个示例展示了如何利用调度器来安排定时使命。我们界说了一个 clear_logs 函数,在远程服务器上删除日记文件,并利用调度器每隔一天执行一次这个使命。


示例五:文件传输与管理
远程控制不仅仅是执行下令,文件传输也黑白常重要的一部分。我们可以利用 Paramiko 来实现文件的上传和下载:
  1. import paramiko
  2. from scp import SCPClient
  3. # 创建SSH客户端
  4. client = paramiko.SSHClient()
  5. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. # 连接到远程服务器
  7. client.connect('你的服务器IP', username='用户名', password='密码')
  8. # 创建SCP客户端
  9. scp = SCPClient(client.get_transport())
  10. # 上传文件
  11. scp.put('local_file.txt', 'remote_file.txt')
  12. # 下载文件
  13. scp.get('remote_file.txt', 'local_file.txt')
  14. # 关闭连接
  15. scp.close()
  16. client.close()
复制代码
通过这个示例,我们可以看到利用 SCP(安全复制协议)进行文件传输黑白常方便的。我们可以将本地文件上传到远程服务器,也可以将远程文件下载到本地。


示例六:图形界面与远程桌面控制
假如你希望用 Python 实现远程桌面的功能,可以利用 pyautogui 库来控制远程服务器的图形界面:
  1. import pyautogui
  2. # 模拟按键
  3. pyautogui.typewrite('Hello World!')
  4. pyautogui.press('enter')
  5. # 模拟鼠标点击
  6. pyautogui.click(100, 100)
  7. # 截屏
  8. screenshot = pyautogui.screenshot()
  9. screenshot.save('screenshot.png')
复制代码
这个示例展示了如何利用 PyAutoGUI 模拟键盘和鼠标操纵,以及截屏。虽然这个方法并不是真正的远程桌面控制,但它可以用来实现一些简朴的图形界面操纵。


三、总结

通过以上几个示例,我们可以看到 Python 远程控制 Windows 服务器的方法是多种多样的。从简朴的下令执行到复杂的图形界面操纵,无论你的需求是什么,都可以找到合适的工具和方法。

希望这篇文章能给你带来灵感,让你在 Python 的天下里找到更多有趣的应用场景。无论是实现自动化使命,还是解决日常问题,Python 总能给你带来惊喜。

最后,回到我们的故事。小明通过 Python 成功控制了家里的自动喂食器,不仅解决了皮皮的喂食问题,还让他在编程的蹊径上迈出了重要的一步。大概在不久的将来,他会用 Python 实现更多的奇思妙想。



四、作者Info

   Author:小鸿的摸鱼日常

Goal:让编程更有趣! 专注于 Web 开发、爬虫,游戏开发,数据分析、天然语言处理,AI 等,等待你的关注,让我们一起成长、一起Coding!

版权说明:本文克制抄袭、转载,侵权必究!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表