zoukankan      html  css  js  c++  java
  • 【打包构建】Mac下使用expect实现执行sudo命令时自动输入密码

    一、简介

      最近想在Jenkins执行Build工作结束后,再执行一些sudo的命令,但是在Mac上sudo命令需要提供密码才能执行。而Jenkins在执行自动化操作的时候,我们是无法在构建任务中手动输入密码的,只有实现了自动输入sudo密码才能让整个构建任务继续执行下去,要不然就会无限期地卡在等待输入密码这一步。

      在网上看到过利用管道实现sudo命令自动输入密码的方法,我在Mac上试了,并不奏效,估计只能在Linux上运行,代码如下:

    echo "password" | sudo  -S commander

      后来又看到通过修改/etc/sudoers中的系统配置实现免密执行sudo的方法,但是这种方法也有缺点,一旦修改错误的话会造成用户权限紊乱,导致当前用户再也无法执行sudo提权的命令了,比较危险。同时修改完以后执行任何命令都不需要sudo了,在安全性控制方面粒度比较大,容易造成隐患。

      那么有没有一种比较优雅的方式既能实现sudo执行某些命令或者脚本免密,且不需要改动系统配置文件,安全性又较高的方法呢?expect,它来了!

    二、利用expect实现执行sudo命令时自动输入密码

      expect是Mac下的一个软件包,利用它可以很方便地在自动化流程中实现一些需要交互性的操作,我们直接通过brew就可以很方便地安装它:

    brew install expect

      然后我们就可以开始编写自动化脚本了,比如我想在Jenkins构建结束以后,执行sudo rm -rf ./Build/temp/这样的清理缓存操作,那我就可以这样写:

    #autorm.sh
    #expect的安装路径 #
    /usr/bin/expect这个路径安装完expect之后 which expect可以查看 #!/usr/bin/expect -f #设置超时时间 set timeout 3 #设置你的Mac用户密码 set password 123456 #传递交互指令 spawn sudo rm -rf ./Build/temp/ #根据输出传递数据,在这里是等待密码提示显示 expect "*asswor*" send "$password " #保持在远端 interact

      同样还可以通过$argv 参数数组传递,expect autorm.sh 123456

    set password [lindex $argv 0]
    expect "password" {send "$password
    
    "}

      有一点额外注意的是:上面的这个脚本不能当做普通的shell脚本来执行了,如果你在终端下尝试执行 sh autorm.sh会报错,得用 expect命令来执行这个特殊的脚本:expect autorm.sh。如果提示没有权限的话,再执行一下chmod u+x autorm.sh给一下执行权限就可以了。

    三、总结

      在本篇博客中,马三为大家介绍了一种比较优雅的实现Mac下执行sudo命令免密的方法,希望可以帮助到大家!

    如果觉得本篇博客对您有帮助,可以扫码小小地鼓励下马三,马三会写出更多的好文章,支持微信和支付宝哟!

           

    作者:马三小伙儿
    出处:https://www.cnblogs.com/msxh/p/13567400.html
    请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!

  • 相关阅读:
    python基础简记
    关于cmake找不到库的问题
    【STM32H7教程】第92章 STM32H7的FDCAN总线应用之双FDCAN实现(支持经典CAN)
    《安富莱嵌入式周报》第237期:2021.10.25--2021.10.31
    【STM32H7教程】第91章 STM32H7的FDCAN总线基础知识和HAL库API
    【STM32H7教程】第90章 STM32H7的CAN FD总线之关键知识点整理
    【STM32H7教程】第89章 STM32H7的CAN FD总线基础之前世今生
    embOS推出一个RTOS的革命性功能,支持微秒和CPU时钟周期级分辨率的任务调度和API延迟参数设置
    【不是问题的问题】为什么STM32的Flash地址要设置到0x08000000
    《安富莱嵌入式周报》第236期:2021.10.18--2021.10.24
  • 原文地址:https://www.cnblogs.com/msxh/p/13567400.html
Copyright © 2011-2022 走看看