原标题:分享 | CentOS 下shell 脚本自动输入账号密码
约定:
1. >表示终端输入
2.>>表示终端输出
===========华丽丽的分割线===========
有一个项目放在了在线的git的仓库里面,因为这个项目需要在线调试每次需要把更新的代码pull到服务器里面。不想给这个服务器添加公钥,只能使用https来获取代码,存放在【/www/wwwroot/heicoder/】 目录下。然后不想每次打这么多的代码来获取更新,于是写了一个很简答的脚本update.sh。
===update.sh的代码清单===
cd /www/wwwroot/heicoder
git pull origin wuyunbin
===update.sh的代码清单===
赋予了777权限,从理论上是可以直接通过运行 【./update.sh】来获取更新。但是有一个麻烦,每次都需要输入一次账号密码。这就非常讨厌了。

经过探索发现可以使用expect来完成这个事情。
我们先安装一个expect,在centos下的安装非常简单
> sudo yum install expect

稍等

直接【y】

看到“完毕”就说明expect安装好了。
然后让我们再建一个脚本,名字不妨取做pull.sh
===pull.sh的代码清单===
#!/usr/bin/expect -f
spawn ./update.sh
expect "Username for 'https://gitee.com'"
send -- "617772977@qq.com\n"
expect "Password for 'https://617772977@qq.com@gitee.com'"
send -- "这里替换成你自己的密码就好了\n"
interact
===pull.sh的代码清单===
然后我们给【./pull.sh】赋予777权限
>chmod +777 ./pull.sh
试着运行一下【./pull.sh】

成功拉取到更新,也不在提示要输入账号密码了。^_^
我们回过头来解读一下【./pull.sh】
第一行 “#!/usr/bin/expect -f”:指示了这个脚本要用哪个程序来运行;
第二行:“spawn ./update.sh”:是重点,在EXPECT下启动了一个我们要执行的程序;
第三行:“expect "Username for 'https://gitee.com'"”也是重点,我们要告诉expect,当什么信息出现时需要expect帮助我们完成交互;
第四行:“send -- "617772977@qq.com\n"”就是出现输入用户名的提示时,要发送的内容;
第五,六行参考第三四行;
第七行:“interact ”是保持交互,不要退出。没有这句的话,完成后会自动退出。
PS: pull.sh 脚本中有一个地方需要注意到:
send -- "617772977@qq.com\n" 这里,“ -- ”横线和后面的邮箱之间是有一个空格的。返回搜狐,查看更多
责任编辑: