今天想和大家聊聊所有开发者需要经常使用的技能:登录服务器。
看似一个ssh命令即可解决,但是在某些时候,我们还是会遇到一些不便,比如:
- 需要记住远程机器的IP地址。
- 如果机器采用密码认证方式,需要记住用户名和密码。
- 很多时候需要先登录到跳板机,再从跳板机登录到目标机器。
- 当同时登录到多台机器时,需要在多机器间切换时,在终端很难分辨,哪个终端是登录的哪台机器。
看似很简单的登录,也给我们带来了不小的麻烦。尤其是当我们有大量的机器需要登录时,如果快速,自动的登录这些机器是个难题。
我想应该有不少的开发者已经遇到了这些问题。今天就介绍使用iterm2来实现快速,自动的登录。
iTerm2是一个Mac上的终端工具,类似于Windows上的Xshell。是目前Mac平台上最受欢迎的一个终端工具,功能强大,稳定,而且是免费的。推荐大家使用。
iTerm2提供了Profile的功能。Profile是可配置的一个终端会话,比如可以配置终端的初始化命令,窗口大小,配色方案,会话管理等等。我们可以为每一个要登录的机器创建一个Profile,在Profile的初始化命令里执行ssh登录,这样当我们打开Profile时,就自动登录到了目标机器,是不是很奈斯^_^。
另外,为了实现可以先ssh到机器A,再从A上ssh到机器B,还需要借助另一个小工具expect。
Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。Expect是Linux系统的一个内置命令,但是Mac上需要独立安装。
本教程中会介绍expect的一些简单命令,更详细的使用方法我会在后续的文章中分享给大家。
简单做个总结就是,实现ssh自动登录,需要做3件事情:
- 安装好iTerm2。
- 编写一些expect脚本,实现ssh自动登录。
- 新建Profile,在Profile中执行上一步创建的expect脚本。
1.安装iTerm2
从iTerm官网下载安装即可。iTerm2是完全免费的。
2.编写expect脚本
2.1 安装expect
在Mac上可以使用Homebrew来安装expect。一条命令即可搞定。
brew install expect
Homebrew是Mac上一款高效的包管理工具,好比Ubuntu的apt-get,CentOS的yum。
2.2 编写expect脚本
这里我直接给出相关的代码。大家直接使用即可。
1) 直接登录到机器
针对采用key认证和密码认证,参数会有微小差别:
- key认证:不需要密码。比如“login.sh admin 192.168.1.100”。
- 密码认证:需要密码。比如“login.sh admin 192.168.1.100 Hello1234”。
2) 登陆机器A,然后在A上登陆到机器B。该方式即常用的通过跳板机或堡垒机登录。
3. 在iTerm中新建Profile
打开iTerm,依次选择iTerm2 -> Preferences -> Profiles,进入如下界面:
- 标注 1:"+"表示新增Profile,"-"表示移除Profile;
- 标注 2:表示我们自定义的Profile名称,并自动显示在标注3处;
- 标注 4:Profile执行的Shell脚本;
- 标注 5:可以为Profile设置一些说明,会在终端窗口的右上角显示。
其中,标注4的内容是非常重要的,其必须按顺序包括:expect脚本的全路径、服务器名称及服务器密码。示例中的命令为:
/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界面中设置的Badge。示例中设置的是[192.168.1.100][develop][user],用于说明当前登录的机器IP是192.168.1.100,机器的环境是develop,部署的是user服务。当然,Badge可以是任意的文本,大家可以根据自己的需要来设置。Badge是一个很好用的功能,在打开了多个终端是可以帮助我们快速的分辨出当前终端登录的是哪个机器。
结束语
通过iTerm + iTerm Profile + expect,我们可以实现快速,自动的登录服务器,可以大大提升开发和运维效率,推荐大家使用。