经常需要通过ssh登录服务器,我们可以使用密钥的方式来免密码登录,但是有些情况我们没法左右运维去给我创造sshkey,那么每次使用ssh root@ip
,然后输入密码,这种方式就很累,每次都要输入,而且密码都很复杂,需要去找到密码然后拷贝。很蛋疼,那么能不能有方式免去输入密码这个步骤?
我们希望能自动化去执行一些命令,那么需要介绍下expect
。
expect
是一个自动化交互套件,主要用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通讯。
expect
启动交互流程:
- spawn 启动交互进程
- expect 获取指定关键字
- send 向指定程序发送指定字符
- interact 退出自动化,进入人工交互
那我们可以编写一个expect
的脚本,名字就叫ip
,注意不需要文件后缀:
1 | !/usr/bin/expect |
上面这个代码很简单,只有预定一些变量,然后主要难理解的是expect
语句。这个就是“模式-动作”,也就是匹配到一个模式就执行对应的动作。
上面的意思是,匹配到yes/no
字符串,就发送yes
。然后继续执行脚本。如果匹配到password
,就发送我们这里定义好的密码字符串。最后退出自动化,进入人工交互。
那么写好之后如何使用呢?
我们是在iterm里面,首先打开iterm,然后在工具栏找到profiles -> open profiles -> edit profiles
。首先新增站点,然后找到右侧的command
:
然后下次需要登录服务器的时候只需要点开profiles
然后点击这个站点即可直接登录,不需要输入密码。
奇怪的知识增加了,更方便了。