之前一直在Windows下使用xshell管理和登录Linux服务器,在需要上传和下载文件的时候可以愉快的使用rz和sz,最近终于把公司用了好几年的DELL淘汰了,工作环境换到了MacOS,所以也不得不开始使用(折腾)iTerm2。
打开iTerm2,首先我们会遇到一个比较棘手的问题:iTerm2没有会话管理器。仔细研究后,可以发现iTerm2中可以添加多个profile,并且有密码管理器。所以方案1: 如果不想依赖外部组件或者配置,我们可以使用多个profile来管理多个服务器,我们为每个服务器设置一个profile,将profile的启动命令设置为ssh user@ip,这样就实现了一个简易的会话管理器。
除了这种方式,我们还可以在~/.bash_profile中添加多个alias,一个alias的内容就是连接一个特定的服务器;再例如我们还使用ssh_config来给多个服务器命名来简化管理。当然,除了这些土办法,还有shuttle (https://github.com/fitztrev/shuttle)这样的工具可以让我们图形化地管理多个server。
通过上面的探索,服务器管理的问题总算解决了。但是这些方式并不能像xshell一样方便地同时管理登录密码或者私钥,这些方案也只是帮助我们快速输入ssh user@ip这样的一串信息。
由于MacOS和Linux上的SSH使用私钥的方式基本相同,所以私钥的登录方式就比较简单了,只需要将需要使用的私钥放入.ssh文件夹中就可以登录相应的服务器。但是登录密码的输入给我们带来了不少麻烦。
熟悉Linux的同学可能很快想到了expect来自动输入,但这种办法不仅存储了明文密码还会给我们后续使用rz、sz带来问题;因此我还是建议使用iTerm2自带的密码管理器,首先我们提前把常用的难记的密码都存储到密码管理器中,这样当远程服务器提示我们输入密码的时候,按下cmd+option+F三个按键就可以调出密码管理器,使用上下键选择对应的密码后按回车键即可完成密码输入。
折腾了半天,我们终于可以相对便捷地登录多个服务器了,新的问题也就来了,怎么使用sz、rz进行文件的传输呢?
简单的说,我们需要在MacOS上安装brew,然后使用brew安装lrzsz。安装完毕后,我们还需要下载使用第三方的脚本,并且在iTerm2中设置触发器来使能sz和rz命令。
首先将https://github.com/mmastrac/iterm2-zmodem开源的两个脚本下载下来备用,假设存储为 /usr/local/bin/iterm2-send-zmodem.sh和 /usr/local/bin/iterm2-recv-zmodem.sh,之后使用chmod为这两个脚本添加可执行权限。然后我们在iTerm2中打开profile管理器,选择profile-advanced-triggers-edit,新增两个触发器,内容如下。
完成后如下图所示,注意路径要修改为两个脚本的真实存放路径。
完整上面的操作后,我们就能在远程服务器上使用sz和rz了(前提是没有使用expect进行登录)。
关于expect登录的服务器不能使用sz和rz的讨论,可以参考这个讨论。https://github.com/mmastrac/iterm2-zmodem/issues/19。
领取专属 10元无门槛券
私享最新 技术干货