Ansible `shell` 模块

Ansible shell 模块

一、简介

  • 功能shell 模块用于在远程主机上通过 shell 解释器执行命令。与 command 模块不同,shell 模块支持 shell 特性,如管道(|)、重定向(>)、环境变量(如 $HOME)、条件命令、脚本等。
  • 使用场景:适用于需要利用 shell 解释器的复杂命令,或者需要执行带有 shell 特性的脚本和命令串。

二、基本用法

2.1 语法

ansible <pattern> -m shell -a "<command>"
  • <pattern>:指定要操作的主机或主机组,例如 allwebservers
  • -m shell:指定使用 shell 模块。
  • -a "<command>":提供要通过 shell 执行的命令。

2.2 示例

  • 在所有主机上执行带有环境变量的命令

    ansible all -m shell -a "echo $HOME"
    
    • 解释:在所有主机上执行 echo $HOME,输出当前用户的主目录路径。
  • 执行带有管道的命令

    ansible all -m shell -a "ps aux | grep httpd"
    
    • 解释:在所有主机上列出与 httpd 相关的进程信息。
  • 执行多条命令

    ansible all -m shell -a "mkdir -p /tmp/testdir && touch /tmp/testdir/testfile"
    
    • 解释:在所有主机上创建一个目录 /tmp/testdir,并在该目录下创建一个空文件 testfile
  • 执行脚本

    ansible all -m shell -a "/path/to/script.sh"
    
    • 解释:在所有主机上执行指定路径的脚本 script.sh

三、输出结果

执行 shell 模块后的典型输出示例:

web1.example.com | CHANGED | rc=0 >>
/home/user
  • CHANGED:表示命令执行成功并产生了输出。
  • rc=0:表示返回码为 0,命令执行成功。
  • 输出/home/user 是命令的标准输出。

如果命令执行失败,例如命令语法错误或权限不足,会返回类似如下的错误:

web1.example.com | FAILED | rc=2 >>
/bin/sh: 1: cannot create /root/testfile: Permission denied
  • FAILED:表示命令执行失败。
  • rc=2:表示返回码为 2,通常表示权限问题。
  • 错误信息:显示具体的错误原因,如权限被拒绝。

四、常见选项

4.1 chdir

  • 功能:指定命令执行前切换到的目录。

  • 用法

    ansible all -m shell -a "chdir=/tmp ls -l"
    
    • 解释:在所有主机上切换到 /tmp 目录,然后执行 ls -l 命令。

4.2 creates

  • 功能:在指定的文件或目录存在时,跳过命令执行。

  • 用法

    ansible all -m shell -a "creates=/tmp/somefile touch /tmp/somefile"
    
    • 解释:只有在 /tmp/somefile 文件不存在时,才会创建该文件。

4.3 removes

  • 功能:在指定的文件或目录不存在时,跳过命令执行。

  • 用法

    ansible all -m shell -a "removes=/tmp/somefile rm -f /tmp/somefile"
    
    • 解释:只有在 /tmp/somefile 文件存在时,才会删除它。

4.4 warn

  • 功能:控制是否显示关于使用 shell 模块的警告。默认为 yes,可以设置为 no 来禁用警告。

  • 用法

    ansible all -m shell -a "warn=no echo 'Hello, world!'"
    
    • 解释:在所有主机上执行命令,并且不会显示使用 shell 模块的警告信息。

五、注意事项

  • 安全性:由于 shell 模块执行的命令通过 shell 解释器,因此有可能受到 shell 注入攻击的威胁。使用 shell 模块时应特别注意处理不受信任的输入。
  • 模块适用性shell 模块非常强大,但除非需要使用 shell 的特性,否则应优先考虑使用更安全的 command 模块。
  • 返回码shell 模块会返回执行命令的标准输出、错误输出和返回码(rc),这有助于判断命令执行的成功与否。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值