Linux下使用expect自动登录其他服务器
先简单还原一下:
因为穷,买不起国内云服务器,所以为了测试某个业务,我就用树莓派、小米路由器(已开启SSH)同时在跑程序,但是有个问题是,由于路由器性能比较低,长时间的跑程序会卡住,而且路由器是阉割版的OpenWrt,环境不理想。
所以我需要定时(crontab)从树莓派通过Linux下的ssh命令远程登录到小米路由器,并对程序执行restart
很蛋疼……但是过程中遇到一个问题:
我打算直接写个shell脚本丢到树莓派的crontab里,但是第一步就卡住了,因为使用ssh命令连接后,会提示输入密码,怎么样让脚本自动输入密码呢?
一通搜索,找到了expect
expect是用与提供自动交互的工具,它可以让一些需要交互的任务自动化地完成。相当于模拟了用户和命令行的交互操作。 比如登录时输入密码需要交互,bash脚本无法完成,可以使用expect来完成。
先安装
yum install expect -y
脚本
#!/bin/bash
expect <<!
spawn ssh root@192.168.2.100 -p 3333
sleep
expect "*assword*"
sleep 2
send "admin\r"
sleep 1
send "killall lighttpd\r"
sleep 1
send "/usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf\r"
sleep 2
exit
!