0%

Mac 使用iTerm2快捷登录远程服务器

经常需要通过ssh登录服务器,我们可以使用密钥的方式来免密码登录,但是有些情况我们没法左右运维去给我创造sshkey,那么每次使用ssh root@ip,然后输入密码,这种方式就很累,每次都要输入,而且密码都很复杂,需要去找到密码然后拷贝。很蛋疼,那么能不能有方式免去输入密码这个步骤?

我们希望能自动化去执行一些命令,那么需要介绍下expect

expect是一个自动化交互套件,主要用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通讯。

expect启动交互流程:

  • spawn 启动交互进程
  • expect 获取指定关键字
  • send 向指定程序发送指定字符
  • interact 退出自动化,进入人工交互

那我们可以编写一个expect的脚本,名字就叫ip,注意不需要文件后缀:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/expect

set PORT 22
set HOST 121.**.**.27
set USER root
set PASSWORD ycm******xx

spawn ssh -p $PORT $USER@$HOST
expect {
"yes/no" {send "yes\r";exp_continue;}
"*password:*" { send "$PASSWORD\r" }
}
interact

上面这个代码很简单,只有预定一些变量,然后主要难理解的是expect语句。这个就是“模式-动作”,也就是匹配到一个模式就执行对应的动作。

上面的意思是,匹配到yes/no字符串,就发送yes。然后继续执行脚本。如果匹配到password,就发送我们这里定义好的密码字符串。最后退出自动化,进入人工交互。

那么写好之后如何使用呢?

我们是在iterm里面,首先打开iterm,然后在工具栏找到profiles -> open profiles -> edit profiles。首先新增站点,然后找到右侧的command
iterm expect

然后下次需要登录服务器的时候只需要点开profiles然后点击这个站点即可直接登录,不需要输入密码。


奇怪的知识增加了,更方便了。

码字辛苦,打赏个咖啡☕️可好?💘