Shell脚本交互之:自动输入密码

Abel 2019-01-29

Shell脚本交互之:自动输入密码

执行shell脚本时,遇到需要输入yes/no的时候,怎么自动化完成输入呢?

直接在命令后面加-y即可!比如:yum-yinstallxxx、yum-yupdate。

Shell脚本交互之:自动输入密码

在she'll脚本运行过程中该如何交互实现自动输入密码呢?

下面总结三种实现方法。

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

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

实现ftp自动登录并运行ls指令的用法如下:其中zjk为用户名,zjk123为密码

ftp-i-n192.168.21.46<<EOF

userzjkzjk123

ls

EOF

二:管道:跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数

所以实现sudo自动输入密码的脚本如下:其中zjk123为密码

echo'zjk123'|sudo-Scpfile1/etc/hosts

实现自动修改密码的脚本写法如下:

echo'password'|passwd-stdinusername

三:expect:上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了

expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包

语法如下:

#!/bin/expect

settimeout30

spawnssh-ljikuan.zjk10.125.25.189

expect"password:"

send"zjk123\r"

interact

注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

在运行脚本时候要expectfile,不能shfile了

上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

expect"password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:jikuan.zjk@10.125.25.189'spassword:

send就是将密码zjk123发送过去

interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台

---------------------

作者:zhangjikuan

来源:CSDN

原文:https://blog.csdn.net/zhangjikuan/article/details/51105166

版权声明:本文为博主原创文章,转载请附上博文链接!

相关推荐