下面献上一个简单的人机交互脚本,用来展示expect方法的强大而美妙的功能。
该脚本能够检测ssh命令执行之后的提示语,自动匹配完成密码输入。
##########################################################
### 复制下面的脚本,保存到文件ssh.sh中即可执行。
### 1、若没有执行权限,通过 chmod a+x ssh.sh 添加;
### 2、若文件ssh.sh在windows下编辑,请确保语系正确,可在linux上通过 dos2unix ssh.sh 转换;
### 3、若缺少expect,则需要先安装之,详情请参考本人的另外一篇博文《开源软件expect软件安装》;
##########################################################
#!/usr/bin/expect -f
### input parameters
set REMOTE_IP [lindex $argv 0]
set REMOTE_HOSTNAME [lindex $argv 1]
set PASSWD [lindex $argv 2]
set REMOTE_CMD [lindex $argv 3]
# set REMOTE_IP 192.168.200.129
# set REMOTE_HOSTNAME root
# set PASSWD xos123
# set REMOTE_CMD ls -al /home
### variables
set timeout 10
### expect ssh
# spawn ssh -t root@192.168.200.129 "ls -al /home"
spawn ssh -t ${REMOTE_HOSTNAME}@${REMOTE_IP} "${REMOTE_CMD}"
expect {
"*\(yes/no\)?" { send "yes\\r"; exp_continue }
"*password:" { send "${PASSWD}\r" }
}
expect eof
###