今天分享一下我是如何选择终端,如何提升效率的。
选择哪一款终端?
工欲善其事必先利其器。现在有太多的终端工具了,那我们应该选择哪一款终端呢?
除了经典的***Tmux*** 、iTerm2 等,近几年出现了很多更现代化的终端,如***Warp*** 、Kitty 、***Tabby***等。
现在自媒体这么发达,经常能刷到诸如**「新一代终端XXX,太强了」** 、「还在用XXX?这款终端太香了」。你是否也曾深陷其中,乱花渐入迷人眼,难以抉择,来回折腾?
我选择工具的原则是够用、能满足我的需求,不要有额外的心智负担。
到底需要一款怎样的终端呢?有如下要求:
-
UI不能太丑,不求漂亮,但求简洁。
-
能快速SSH到服务器。能支持二级跳,即先登录到机器A,再从A登录到机器B。适合跳板机登录场景。
-
支持多Tab页。且能清晰地分辨每个Tab对应哪台机器。
基于这3点,找到了一款合适的终端iTerm2,并且使用它快10年时间了。
iTerm2是一个Mac上的终端工具,类似于Windows上的Xshell。是目前Mac平台最受欢迎的终端工具,功能强大,稳定,而且免费。
这期间,不断有新的标榜「21世纪新一代的现代化」终端。但我一直坚守iTerm2。它足够好,且它就在那里。
偶然间发现,最新版的iTerm2竟然支持了ChatGPT。天哪,这还是一款终端工具吗?
Using OpenAI's ChatGPT API, iTerm2 can now write commands for you, interpret the output of commands, and guide you towards a goal. See the AI section below for details.
安装iTerm2
先说明一下,iTerm2仅适用于Mac。Windows和Linux无法使用。
去官网https://iterm2.com 直接下载安装即可。也可以使用Homebrew
安装,但不推荐。
颜值
作为一款效率工具,不用过于追求好看,更希望它是简洁的。不要有多余的UI元素或功能,反而是一种干扰。
第一步 ,给终端添加基本的颜色和高亮,让目录、可执行文件等有不同的颜色标识。在~/.bash_profile
添加如下配置即可:
#enables colorin the terminal bash shell export
export CLICOLOR=1
#setsup thecolor scheme for list export
export LSCOLORS=gxfxcxdxbxegedabagacad
#sets up theprompt color (currently a green similar to linux terminal)
export PS1='[\033[01;32m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$'
#enables colorfor iTerm
export TERM=xterm-256color
第二步:下载并配置主题。iTerm2支持导入主题。从Github项目下载主题:
https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master
这个Git仓库包含了多达50款主题配色,我使用的是***Ubuntu***主题。大家可以根据个人喜好选择。
然后在iTerm2中打开***设置*** > Profiles > Colors > Color Presets > Import ,选择刚下载的itermcolors
文件来导入主题。
强大的SSH登录功能
使用终端最多的场景就是SSH登录服务器了。我每天需要用iTerm2登录开发、测试和生产环境的几十台机器。如何能快速地登录到多台服务器,且能在正确的机器执行正确的命令就很重要了。也就是下面的2点:
-
快速:比如,如何在1秒内快速登录到某台机器。
-
准确:比如,同时打开了多个Tab,原本要重启开发环境k8s,结果重启了生产环境。
接下来介绍我是如何用iTerm2解决这些问题的。
Profile功能
iTerm2有一个概念叫Profile。Profile是可配置的一个终端会话,比如可以配置终端的初始化命令,窗口大小,配色方案,会话管理等。
通过为Profile配置初始化命令,就可以快速登录到某个机器。比如新建一个Profile,取名为开发环境Nginx,使用Ubuntu主题配色,初始化命令ssh root@192.168.100.100
,这样当我们打开这个Profile时,就在终端中自动登录到远程服务器了,是不是很奈斯^_^。
打开iTerm,依次选择***iTerm2*** > Preferences > Profiles ,进入如下界面: 添加Profile界面
-
标注 1:
+
表示新增Profile,-
表示移除Profile; -
标注 2:表示我们自定义的Profile名称,并自动显示在标注3处;
-
标注 4:执行的Shell脚本;
-
标注 5:可以为Profile设置一些说明,在终端窗口的右上角显示。
其中,标注4的内容是非常重要的,其必须按顺序包括:脚本的全路径、服务器名称及服务器密码。示例中的命令为:
/Users/admin/workspace/shell/iterm-login.sh admin 192.168.1.100 Hello1234
其中:
-
/Users/admin/workspace/shell/iterm-login.sh *:*脚本的全路径。脚本内容即为前面提供的。
-
admin:标识号登录的用户。
-
192.168.1.100:要登录的服务器地址。
-
Hello1234:登录密码。
这样我们就创建好了Profile。可以在Profiles菜单中选择该Profile,或者使用快捷键Command
+ O
来快速打开Profiles菜单。打开Profile后,终端如下: 打开Profile界面
可以看到在打开Profile时,已自动登录到目标机器了。并且注意到在终端的右上角出现了一段红色的文本,内容是Profile界面中设置的Badge。用于说明当前登录的机器IP是192.168.1.100,机器的环境是dev,部署的是Nginx服务。
当然,Badge可以是任意的文本,大家可以根据自己的需要来设置。Badge是一个很好用的功能,在打开了多个终端是可以帮助我们快速的分辨出当前终端登录的是哪个机器。
ssh的进阶使用:expect命令
我在工作中就是用Profile来登录服务器的。为每台机器都创建了一个Profile。但初始化命令不是ssh
,而是expect
。
Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。Expect是Linux系统的一个内置命令,但是Mac上需要独立安装。
为什么要使用更复杂的Expect呢?SSH不行吗?请看下面2个场景,SSH还真不行。
-
场景一:有一台新买的机器,第一次SSH登录时,会提示要输入密码。或者提示是否接受Key。这时候就需要手动输入密码或"yes"了。
-
场景二:需要通过跳板机登录服务器。
上面的2个场景其实很常见,尤其是在公司日常工作中。这2个场景不能简单使用SSH解决,而需要Expect来实现交互式命令。我已经把脚本准备好了,大家直接用就行。
场景1 :自动输入密码: 使用expect自动输入密码
场景2 :先登录跳板机,再登录机器: 使用expect先登录跳板机,再登录机器
上面的脚本中,最核心的就是Expect语句块,判断服务器的响应来自动输入命令,模拟人的行为。
Expect脚本的使用也很简单,分2个步骤:
-
步骤一:安装Expect命令。Mac上默认是没有Expect工具的,可以通过Homebrew命令
brew install expect
来安装。 -
步骤二:编写脚本,然后在Profile的命令中指定Expect脚本,传入对应的参数即可。
结束语
今天分享了使用iTerm的Profile功能,可以实现快速、准确地登录服务器。配合Expect命令,可以实现高阶的自动输入密码、通过跳板机登录机器等复杂场景。
希望我的分享可以提升大家的开发和运维效率。如果大家有任何问题和更好的想法,欢迎给我留言。