如何通过 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系统中终端的入口

在 Linux 上的终端启动时运行 python 脚本[关闭]

如何从 Mac 的 Spotlight 运行 Python 脚本(而不必打开终端或 Pycharm)?

我如何使用像 CD 和 LS 这样的 Linux 终端命令? [复制]

如何在Unity中执行Python脚本后让其终端自行关闭

如何在 Linux 中使用终端命令将文件参数传递给我的 bash 脚本? [复制]