欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

mac 终端 sudo echo password 直接密码 不用敲回车 提示输入密码 密码直接给命令 有大用 有大大用 有大大大用

如何将密码传递给sudo命令?

如果要运行sudo命令而不提示输入密码,则可以执行以下命令。

echo password | sudo -S rm -rf /opt/jetty/   

在上面的命令中,我们尝试/opt/jetty使用rm -rf命令删除目录。  -S(标准输入 stdin)选项允许sudo命令从标准输入而不是一个终端装置读出的密码。

如果要将密码存储在文件中,则可以使用cat命令而不是echo下面的示例。

cat password.txt | sudo -S rm -rf /opt/jetty/    


来自  https://www.nhooo.com/note/qa5fhn.html





【打包构建】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\r" #保持在远端   interact
复制代码

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

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

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

三、总结

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

来自  https://www.cnblogs.com/msxh/p/13567400.html

普通分类: