说明
本篇文章主要使用expect脚本来实现自动连接远程服务器并实现交互,不会大篇幅介绍expect的用法,有兴趣的读者可以自己了解,expect是个很强大的实现自动化交互的工具哦~~
代码示例
#!/usr/bin/expect
set timeout 10
set password 123456
spawn ssh ubuntu@xxx.xxx.xxx.xxx
expect {
"(yes/no)?" {
send "yes\r";
expect "password:";
send "${password}\r";
exp_continue;
}
"password:" {
send "${password}\r";
exp_continue;
}
}
interact
第一行的
#!/usr/bin/expect
是告诉系统在执行这个脚本的时候用哪个命令来执行,这边是用expect,是一个类似bash和sh的shell第二行
set timeout 10
设置超时时间为10s第三行
set password 123456
定义了一个变量password
,这个变量记录了登陆远程服务器的密码第四行
spawn ssh ubuntu@xxx.xxx.xxx.xxx
调用spawn
命令来执行一个系统命令。spawn是expect shell的内建命令,只有在expect环境下才可以使用。这行代码的功能就是通过ssh连接远程ECS6~17 行用了一个
expect
命令,可以将这个命令理解为期待shell中输出结果中包含什么关键字- 如果包含的是
(yes/no)?
则表示是第一次连接这个远程服务器,需要手动确认是否保存生成的密钥到~/.ssh/know_hosts
当中,通过send命令输出yes
到shell中。之后再次期望shell的输出结果中包含password:
关键字,再用send命令输出密码。 - 如果包含的是
password:
则表示不是第一次连接这个远程服务器,直接用send输出密码即可
- 如果包含的是
正常如果网络正常,服务器ip、用户名、密码正确的话,执行上面的脚本就可以自动连接到远程ecs了。(注意使用的时候将上述用户名、密码、ip替换成自己的)