0%

使用 Expect 自动完成 ssh 远程登录

为什么要使用Expect ?

在执行 ssh 远程登录时,有时候需要在配置了密钥文件的情况下仍然需要输入密码,这一步骤无法省略,而密码冗长有让我们有必要采取措施来绕过密码输入的步骤。而 Expect 就能够非常简单的完成此任务。

Expect 简介

Expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。   简单地说,expect是一个工具,可以根据用户设定的规则和系统进程进行自动化交互,例如远程登陆的密码输入、自动化的执行远程命令。

Expect 基本命令

send:用于向进程发送字符串
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互

编写脚本

1
2
3
4
5
6
 #!/usr/bin/expect
spawn ssh user@host -i ~/.ssh/user.pem
# 将下方字符串替换为自己的终端输出的提示
expect "Enter passphrase for key '/Users/phpcyy/.ssh/user.pem':"
send "$PASSWORD\r"
interact

ps: 注意将上方的参数替换成自己相应的设置。

执行脚本

添加可执行权限,并执行该脚本,就可以自动连上远程的服务器了。