如何通过 Linux 终端使用 python 脚本关闭所有 PC(Linux)(全部启用 ssh 且用户名和密码相同)
Posted
技术标签:
【中文标题】如何通过 Linux 终端使用 python 脚本关闭所有 PC(Linux)(全部启用 ssh 且用户名和密码相同)【英文标题】:How can I shutdown all PCs(Linux) with a python script via a Linux terminal (all with ssh enabled and same username and password) 【发布时间】:2021-11-15 23:04:39 【问题描述】:我想运行一个 python 脚本来关闭我网络上的所有 PC。它们都是启用了 ssh 且用户名和密码相同的 Linux 机器。我很新,在任何地方都找不到关于我将如何做这件事的任何信息。
【问题讨论】:
【参考方案1】:在我看来,最好使用bash
脚本,因为您可以通过机器上的ssh
命令输入命令。
例如,bash
中的一行执行通过 ssh 关闭 PC 的命令将是:
ssh user1@server1 "sudo shutdown -h now"
如果您仍想在 Python 中执行此操作,请尝试使用 subprocess
模块或 os
模块执行 shell 命令。
【讨论】:
【参考方案2】:首先,为此使用公钥身份验证比将密码存储在某处 (https://serverpilot.io/docs/how-to-use-ssh-public-key-authentication/) 要好得多。
然后你只需要通过 ssh 调用关机命令。
import os
os.system("ssh user@host 'shutdown now'")
显然您的远程系统中的用户必须具有关闭计算机的权限。
【讨论】:
【参考方案3】:另一种选择是使用Ansible(用 Python 编写,带有 Python 模块),您可以使用它管理远程服务器(几乎所有操作系统)。
更多:ansible: reboot_module
以下是多个重启场景下 Ansible 代码的一些示例(例如test.yml
):
- name: Unconditionally reboot the machine with all defaults
reboot:
- name: Reboot a slow machine that might have lots of updates to apply
reboot:
reboot_timeout: 3600
- name: Reboot a machine with shutdown command in unusual place
reboot:
search_paths:
- '/lib/molly-guard'
- name: Reboot machine using a custom reboot command
reboot:
reboot_command: launchctl reboot userspace
boot_time_command: uptime | cut -d ' ' -f 5
Ansible 只需安装在您的计算机(台式机/笔记本电脑/服务器)上即可控制所有其他节点。您可以控制的操作系统或发行版几乎没有限制(包括 Linux、UNIX、Windows 等)。需要配置ssh
连接(用户和密码)。您的代码不必对节点列表、用户名或密码进行硬编码,它只是一个配置。
这种设置可能最容易大规模管理多个节点,并且可以提供添加额外节点管理功能的能力。
为了从 Python 运行 ansible
,Ansible 提供了 ansible-runner
Python 包(PyPI,GitHub),可用于此目的。
import ansible_runner
r = ansible_runner.run(private_data_dir='/tmp/demo', playbook='test.yml')
print(": ".format(r.status, r.rc))
# successful: 0
for each_host_event in r.events:
print(each_host_event['event'])
print("Final status:")
print(r.stats)
更多文档:ansible-runner: python_interface
【讨论】:
以上是关于如何通过 Linux 终端使用 python 脚本关闭所有 PC(Linux)(全部启用 ssh 且用户名和密码相同)的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 上的终端启动时运行 python 脚本[关闭]
如何从 Mac 的 Spotlight 运行 Python 脚本(而不必打开终端或 Pycharm)?