我们常用sudo,ssh、ftp命令操作服务器或者修改权限的时候都会要求输入password,但是shell脚本运行中该如何交互实现自动输入密码呢?
下面总结三种实现方法。
一、重定向:
用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码
shell用重定向作为标准输入的用法是:
ftp -i -n 192.168.15.16<
user john pw@2018
ls
EOF
二:管道:
跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数,所以实现sudo自动输入密码的脚本如下:其中pw@2018为密码
echo 'pw@2018' | sudo -S cp fileone /tmp
实现自动修改密码的脚本写法如下:
echo 'password' | passwd -stdin username
三:expect:
上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了,expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包。
CentOS下安装命令很简单:
sudo yum install expect
Mac用户,可以通过homebrew安装(需要先安装homebrew)
brew in