iTerm2 dynamic profiles manage

Category: Personal Tag: Tool Date:

目的

本文为整理当前使用iTerm2管理多个服务器的使用经验而作。

关键字

  • iTerm2
  • expect
  • Dynamic Profile

正文

iTerm2 连接服务器

一般而言,使用终端连接服务器时,直接通过命令行输入ssh user@host即可,但是当涉及管理多个服务器、并且可能需要经常临时连接时,常有捉襟见肘之感。

此时进一步的思路是使用ssh密钥,但在笔者的使用场景中,该方法也有不便之处:其一,部分服务器因特殊原因不便使用ssh密钥;其二,当服务器数量过多时,无法搜索、只能凭记忆输入ssh别名也比较痛苦;其三,部分服务器需要使用中间服务器作跳板机进行连接,到达跳板机时,仍需要再另行操作连接目标服务器,不太流畅。

当前笔者使用的方式为iTerm2自带的Profiles功能,结合expect方式进行快速连接,并通过Dynamic Profiles配置Profile模板,以下进行介绍。

Profiles 配置管理多服务器

iTerm2自带管理Profiles功能,简单配置namecommand即可

profiles

此时可通过快捷键cmd+o打开iTerm2Open Profiles弹窗,查看Profiles列表并通过选择、搜索等方式选中并连接服务器

open_profiles

当使用熟悉后,更快速一些的方式是,通过快捷键cmd+shift+o打开iTerm2Open Quickly弹窗,并通过模糊搜索Profile Name连接服务器

open_quickly

expect 连接服务器

一个简单的示例文件:

#!/usr/bin/expect -f
set user USER
set host HOST
set password PASSWORD
set port PORT
set dir DIR

spawn ssh -o ServerAliveInterval=30 -p$port $user@$host
expect "*assword:*"
send "$password\r"

# after login
expect "*\$*"
send "bash\r"
send "cd $dir\r"
send "ls"
interact
expect eof

将该文件保存到本地目录,如~/host_example.sh,然后通过expect ~/host_example.sh命令,连接服务器,并进入bash环境,进入DIR目录,输入ls查看当前目录文件

对于需要跳板机的情况,在上述示例文件的基础上继续添加send命令即可

# set 设置省略,参考上方文件


# after login
expect "*\$*"
send "bash\r"

# 暂停留出冗余时间后,连接目标服务器
# port2、user2等参考上方set配置
sleep 2
send "ssh -p$port2 $user2@$host2\r"
expect "*assword:*"
send "$password2\r"
expect "*\$*"
send "bash\r"
send "cd $dir\r"
send "ls"
interact
expect eof

Profiles结合expect

Profiles方便管理多服务器,结合expect进行更复杂的逻辑处理,在以上内容的基础上,直接使用expect命令替换Profile中的command命令即可

profile_expect

Dynamic Profiles

当管理服务器数量增加时,可考虑配置Profile模板,使用iTerm2Dynamic Profiles可以比较方便的进行管理。

  1. 配置Profile模板,建议模板Name特殊标记以便识别,同时后续真实服务器Name进行区分,以免在通过快捷键连接服务器时对搜索结果产生干扰
  2. 进入iTerm2目录~/Library/Application Support/iTerm2/DynamicProfiles/
  3. 新建文件,这里以笔者使用的json文件为例
    {
     "Profiles": [
         {
             "Name": "host1",
             "Guid": "host1",
             "Command": "expect \/Users\/macname\/host1.sh",
             "Dynamic Profile Parent Name": "host_example"
         },
         {
             "Name": "host2",
             "Guid": "host2",
             "Command": "expect \/Users\/macname\/host2.sh",
             "Dynamic Profile Parent Name": "host_example"
         },
    

Guid不能重复,需要保证唯一性

host1.sh, host2.shexpect 连接服务器中配置的文件

此时在Profiles中会自动出现两个新的Profile,再通过Open Quickly即可快速连接,后续可通过调整模板配置统一调整多个服务器配置,如配色、文字等。

dynamic_profile


参考

expect-提供用户名和密码的ssh自动登录

iTerm2 Documentation-Dynamic Profiles