MacOS下管理远程服务器并使用rz和sz进行文件上传和下载

之前一直在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。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180907G1GC0300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券