Mac 电脑下最新实用ssh免密码登录脚本

420 阅读5分钟

description: 使用SecureCRT痛苦之后的崛起

mac 系统上我一直少有发现一款好用的 ssh 工具, 免去我记住多个密码的烦恼.

经过大量时间的寻找, 我发现了一款名为 SecureCRT 的工具, 可以在 mac 系统上使用, 的确可以免除我记住大量密码的烦恼, 但是使用的痛苦也随之而来.

  1. 不存在清理屏幕的快捷键 经常登录服务器进行测试环境的日志查阅, 这个时候, 界面上停留的可能有进入多少级目录, 然后打了什么命令, 已经其他很多无关紧要的东西在上面. 这个时候清理屏幕就显的很重要, 但是 CRT 不支持. 只能傻傻的通过工具栏上方的按钮去清除屏幕.
  2. vim 之后不能滚轮滑动 文字已经很能说明问题了, 我就不多赘述.
  3. 我自己的 Iterm2 上操作的很开心, 不能用他我就不开心 这一点尤为重要.

基于以上三个问题, 我决定翻出去年写的那个已经不能用的脚本来搞好他.

之前的脚本存在几个问题

  1. 不能展示出来列表 我目前存了多少个服务器, 我记不住, 也不能展示出来
  2. 好端端的坏了 进入服务器之后, 啥也不能干.

通过网上苦苦的搜索, 我找到一个朋友写的一个东西非常棒. fork 了他的项目, 改编了一下, 使其能更好的适用于我的电脑. 此处感谢 AlicFeng 的文章给我的帮助, 此处是github 地址.

首先说说为什么要重写

  1. 电脑上下载的时候总是提示需要管理员的权限, 但是已经使用了, 不厌其烦
  2. 废了好多功夫弄到本地之后, 感觉不是太会用. 这一点很尴尬.
  3. 简书评论区 2 楼回复的很好, 在此引用一下

    -s 登录的时候,后面的编号并不是 ini 文件中的 Index 项,而是取决于 shell 过滤出来的 ini 文件顺序

基于上面 3 点功能, 打算小小的改造一下.

首先解决重点解决第三个问题. AlicFeng 之前使用的是集合, 顺序得不到保证. 因此, 我在想, 是不是可以用 Map 类型来存储. 经过查阅资料, 发现 Map 数据类型和 bash 相关, mac 下的 bash 是 3.x, 但是 Map 数据类型必须要 4.x 以上. 于是乎, 需要升级个 bash.

方法一: 更换系统的 bash, 需要重启电脑

mac 升级 bash 之前需要关闭 SIP(System Integrity Protection). 网上有很多文章关于如何操作, 先简单介绍一下, 不清楚的可以去查阅资料. 首先重启电脑, 并按住 command+r 键, 进入恢复模式.

进入恢复模式的系统之后, 打开上方工具栏中"实用工具"下的"终端".

在终端中输入

csrutil disable

成功之后, 重启电脑.

这个时候就可以升级 bash 了.

打开 iterm2, 输入命令

brew install bash

升级成功之后输入如下命令

# 替换bash
sudo mv /bin/bash /bin/bash.origin
sudo ln -s /usr/local/opt/bash/bin/bash /bin/bash
# 由于本mac版本下的sh并不是直接链接bash,而是bash的一个文件拷贝。因此,还要替换默认的sh指向的命令为bash,如下:
sudo mv /bin/sh /bin/sh.origin
sudo ln -s /usr/local/opt/bash/bin/bash /bin/sh

这个时候可以通过命令来查看是否成功

bash --version

安装之后, 就可以重启电脑, 把 SIP 给启动. 同样进入恢复模式下输入

csrutil enable

然后重启电脑.

方法二: 直接下载新的 bash, 无需重启电脑

打开 iterm2, 输入命令

brew install bash

这个时候需要把下载下来的 lucy 脚本的 "开头"部分, 加上一小段说明

#!/usr/local/bin/bash

表示使用我们当前下载下来的 bash, 而不是系统目录下面的 bash

还是打开 iterm2, 这个时候, 安装一个小插件, 让界面更漂亮

brew install toilet

安装好之后, 就进入了正文.

首先介绍下, 文件路径.

首先到~目录下, 创建一个文件夹

mkdir ssh-lucy

创建一个 servers 的文件. (无后缀).

文件中内容放入以下东西

#服务器IP	       账号	       密码		             	端口	    主机

实际最后放入的东西内容如下图所示

最后的主机一列, 存放的是我们用于寻找登录哪个服务器的名称, 也就是我们存入 Map 中的 key, 可以自定义.

存好服务器地址之后, 就可以使用我们真正的脚本.

服务器脚本最后保留一个空行.

我给她起了一个非常人性化的名字, 也是我心心念念的名字"lucy"([人类的始祖](<en.wikipedia.org/wiki/Lucy_(…)

gayhub 上下载文件"lucy"之后, 放入本地的

/usr/local/bin

目录.

修改文件中的第十行内容"目录"为 servers 存在的绝对路径.

然后赋予这个文件生命

chmod +x lucy

此刻大公告成.

此刻存在的命令如下, 延续了 AlicFeng 之前的命名

// l表示list, 表示查看列表(不包含密码)
lucy -l

// h表示help, 表示帮助
lucy -h

// s 表示ssh, 也就是平时我们使用的登陆方式
lucy -s 主机名

// p表示password, 展示包含密码的查看列表
lucy -p

效果如下:

如果您使用了这个小脚本, 希望可以保留 lucy 的名字, 让我们给他一个生命的延续.