Please enable Javascript to view the contents

利用expect编写自动执行脚本

 ·  ☕ 2 分钟 · 👀... 阅读

使用SSH登录远程服务器机需要手动输入用户名、IP、密码非常麻烦,因此可以用expect编写脚本利用脚本自动登入。

安装expect

Mac下安装

brew install expect

Ubuntu下安装

apt install expect

expect命令

send 用于向进程发送字符串

send命令接收一个字符串参数,并将该参数发送到进程。

expect 从进程接收字符串

expect命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。

spawn 启动新的进程

spawn命令用来启动新的进程,spawn后的sendexpect命令都是和使用spawn打开的进程进行交互。

interact 允许用户交互

interact命令用的其实不是很多,一般情况下使用spawnsendexpect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawnsendexpect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

编写脚本

vim autologin.sh

添加


#expect的安装路径
#!/usr/bin/expect -f
#设置超时时间 
set timeout 3
#私人密码
set password yourpassword
#传递交互指令
spawn ssh root@ip
#根据输出传递数据
expect {
    -re "password" {send "$password\r"}
    -re "yes/no" {send "yes\n";exp_continue} # 有的时候输入几次密码来确认,exp_continue
}
#保持在远端  
interact
#expect eof

注意:若登陆后便退出远程终端,则写expect eof即可。

chmod +x ./autologin.sh #使脚本具有执行权限

执行./autologin.sh即可完成登录。

分享

Jade
作者
Jade
📚Learner🌐Web Developer


目录