跳到主要内容

Ansible如何在远程机器上执行 Linux 命令?

参考答案:

Ansible 是一个自动化运维工具,它允许你使用简单的 Playbooks 在多台机器上执行命令、部署应用程序以及进行配置管理。要在远程机器上执行 Linux 命令,你可以使用 Ansible 的 commandshell 模块。

以下是如何使用 Ansible 在远程机器上执行 Linux 命令的基本步骤:

  1. 安装 Ansible

如果你还没有安装 Ansible,可以使用 pip 或系统的包管理器进行安装。例如,在基于 Debian 的系统上,你可以使用以下命令安装:

sudo apt update
sudo apt install ansible
  1. 配置 Ansible Inventory

Ansible 使用一个 inventory 文件来跟踪要管理的机器。这个文件通常被称为 hosts,并位于 Ansible 的配置文件目录中(通常是 /etc/ansible 或用户家目录下的 .ansible.cfg 指定的目录)。

例如,你的 hosts 文件可能看起来像这样:

[webservers]
web1.example.com ansible_user=your_username ansible_ssh_pass=your_password
web2.example.com ansible_user=your_username ansible_ssh_pass=your_password

这里,我们定义了一个名为 webservers 的组,其中包含两台机器。ansible_useransible_ssh_pass 是连接这些机器所需的凭证。请注意,直接在 inventory 文件中存储密码并不安全,这里只是为了示例。在生产环境中,你应该使用更安全的方法来管理凭证,例如使用 Ansible Vault 或其他秘密管理工具。 3. 编写 Playbook

Playbook 是 Ansible 用于描述你想要在远程机器上执行的操作的 YAML 文件。例如,以下是一个简单的 Playbook,它使用 command 模块在远程机器上执行 ls -l 命令:

保存以下内容为 list_files.yml

---
- name: List files on remote servers
  hosts: webservers
  become: yes  # 如果需要的话,使用 sudo 提升权限
  tasks:
    - name: Run ls -l command
      command: ls -l

在这个 Playbook 中,我们定义了一个任务,该任务在 webservers 组中的每台机器上运行 ls -l 命令。become: yes 表示以 root 权限运行命令(如果需要的话)。 4. 执行 Playbook

现在你可以使用 ansible-playbook 命令来执行这个 Playbook:

ansible-playbook list_files.yml

Ansible 会连接到你在 inventory 文件中指定的每台机器,并执行 Playbook 中定义的任务。执行结果会输出到控制台。 5. 使用 shell 模块执行更复杂的命令

如果你需要执行更复杂的命令或脚本(例如包含管道或重定向的命令),你可以使用 shell 模块而不是 command 模块。shell 模块在远程机器的 shell 中执行命令,因此它支持更多的 shell 功能。但是,请注意,使用 shell 模块可能会增加安全风险,因为它允许执行任意的 shell 代码。因此,在可能的情况下,最好使用 command 模块。