Shell 脚本自动输入密码的三种方式


注意,如果创建.sh文件后不可以执行,请执行sudo chmod 755 文件名.sh来修改权限。


方式一

使用 echo “密码” | (管道符)

使用场景: sudo 命令

在使用普通用户执行 root 命令时有时候会需要输入密码,并且在输入密码后一段时间不需要再次输入(但是不影响),这时候可以使用

echo "密码" | sudo 命令

比如我需要一键清空服务器,则可以创建一个clear.sh文件(假使我的密码是 123456):

echo "123456" | sudo rm -rf /*

那么在执行的时候,我只需要./clear.sh就可以清空我的整个数据库。

方式二

重定向

用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码

shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入

使用场景:不仅仅输入一个密码,还需要输入用户名。

ftp -i -n 192.168.21.46 <<EOF
user 用户名 密码
EOF

方式三

expect

echo + 管道符不是什么时候都可以生效(比如我写的自动提交博客脚本最后需要输入我的服务器的 git 仓库密码就不生效),因此我们可以使用 expect 方法来执行。

set timeout 30
spawn ssh -l 用户名 10.125.25.189
expect "password:"
send "要输入的密码"
interact

这里的语句是这样的:

  1. 设置超时时间为30s
    1. spawn 是 expect 的起始语句,可以理解为从此处开始
    2. spawn 后面的语句是执行 ssh 连接
  2. expect:当发现password:这个字符串后,在后方输入send后面的内容
  3. send:要输入的密码
  4. interact:执行完留在远程控制台,不加这句执行完后返回本地控制台
再举一个例子

这个例子是我真实的脚本文件(但是磨掉了密码),平时用于往我的服务器中提交 hexo 博客

cd /Users/jim/hexo
echo '123456' | sudo -S hexo clean
sudo hexo g
spawn sudo -S hexo d
expect "password:"
send "123456"

首先进入到hexo文件夹下

因为要用到sudo 来 clean/generate/deploy我的博客,所以我这里使用一个 echo+管道符,输入一次 sudo 命令(短时间内不需要再重复输入,所以我只写了一个)

generate 一下 hexo 文件

提交到远程仓库,这里需要输入远程仓库的密码,所以我用spawn标记这句话

expect(发现)到"password:"后执行send

将我的密码 send(发送到)到控制台

【Shell】Shell 脚本自动输入密码的三种方式相关推荐

  1. bash shell脚本访问PostgreSQL的三种方式

    bash脚本里有三种方式访问PostgreSQL数据库 但前提是要设置密码文件.当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如 1 $ sudo -u postgres psql 或 1 ...

  2. input获取焦点vue_在Vue中输入框自动获取焦点的三种方式

    原生JS操作DOM 使用mounted钩子函数,它表示页面一加载进来就执行函数里面的内容(和window.onload类似) 1 //html部分 编号: //vue对象 var vm = new V ...

  3. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

  4. linux 脚本 expected,使用expect实现shell中scp自动输入密码

    使用expect实现shell中scp自动输入密码 前段时间有一个需求,要实现一个自动备份脚本,因为不需要全部备份,所以没有使用rsync,在这里使用scp.因为scp需要输入用户密码,在网上查了好多 ...

  5. c语言中按照“|”字符串截取,shell中取字符串子串的几种方式 截取substr

    echo "123456789" | awk '{print substr($0,5,2)}' 截取 1)awk中函数substr substr(源字符串,开始索引,长度)   开 ...

  6. 命令行运行Python脚本时传入参数的三种方式

    三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...

  7. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...

  8. Java程序初始化启动自动执行的三种方法

    目录 @PostConstruct注解 CommandLineRunner接口 ApplicationRunner 接口 @Order注解设置启动顺序 分享一下自己用过的java程序初始化启动自动执行 ...

  9. python手机版怎么运行项目或脚本-详解python运行三种方式

    方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...

最新文章

  1. CurcveLane-NAS:华为中大提出一种结合NAS的曲线车道检测算法
  2. TikTok电商去年赚了60亿?短视频的尽头是带货?
  3. QT的QCommandLineOption类的使用
  4. php 日期时间 取日期,从PHP中的文本中提取日期,时间和日期范围
  5. 数据产品-数据指标标签常用sql函数
  6. mysql数据库计算两列数据的和_在sql中对两列数据进行运算作为新的列操作
  7. 利用vue-cli配合vue-router搭建一个完整的spa流程
  8. yuv格式转换是那个组织定义的_YUV格式
  9. 模块度Q——复杂网络社区划分评价标准
  10. Solidity ERC777标准
  11. RT-Thread 01线程调度与管理
  12. Windows 10 Office 2019 Retail 转 VOL 版
  13. matlab仿真培训班,Matlab/Simulink进行微网系统仿真建模培训
  14. Linux磁盘故障和文件系统修复(救援模式Centos7、Centos8)
  15. matlab实习,matlab实习报告
  16. uniapp获取用户昵称头像
  17. 【转】山地车知识:什么是XC,什么又是Freeride
  18. 5 大型网站核心架构要素
  19. nexus-基本使用
  20. unity安装问题:启动编译器时出错:许可证无效

热门文章

  1. 让PS可以保存为ICO格式
  2. GitHub开源了一款程序员摸鱼神器!上班摸鱼还不会被老板发现。。。
  3. ubuntu程序莫名崩溃显示killed,程序闪退,排除OOM
  4. 【教学类-30-04】10以内减法题不重复(一页两份)(包括6以内、7以内、8以内、9以内、10以内减法题 只抽取25个)
  5. 怎么把m4a转换成mp3,分享几个方法给大家!
  6. 如何开通企业付款到零钱||小程序红包功能
  7. Linux运维之windows2008R2远程连接问题
  8. 根据起始日期、起始时间、终止日期、终止时间计算年数
  9. 永久免费!吴恩达刚公布的深度学习课程上线网易云课堂
  10. MAX98390CEWX D类放大器,集成动态扬声器管理(MAX98390)