Mac下使用Kitty终端快速通过SSH连接服务器
之前我一直使用 Tabby 作为终端工具,它内置了 SSH 服务器配置管理功能,通过快捷键就能调出交互界面,便捷地连接服务器。但它实在太占用内存了,而且界面经常卡顿。于是我决定切换到 kitty,这是一款由 C 语言和 Python 编写的终端模拟器,以高性能著称。

然而切换到 kitty 后,我发现它并没有类似 Tabby 的 SSH 配置管理功能。经过一番折腾,最终实现了在 kitty 中也能像 Tabby 那样通过交互式界面快速连接服务器的效果。如上图所示,只需按下配置的快捷键,就会打开一个新的标签页,此时可以输入关键字搜索目标主机进行连接。

1. 配置快捷键并实现主机搜索功能
这一功能的核心工具是 fzf,它是一个用于终端的交互式模糊搜索工具。fzf 可以快速搜索、过滤和选择文本内容,非常适合用来实现主机选择功能。
Mac 用户可以通过 Homebrew 安装:
1 | brew install fzf |
安装完成后,需要编写一个 Shell 脚本实现 SSH 连接逻辑。我们将这个脚本命名为 kitty-ssh,保存到 ~/.local/bin 目录下,并赋予执行权限:
注意:请确保
~/.local/bin目录已添加到你的 PATH 环境变量中,否则系统可能找不到该脚本。
1 | # ~/.local/bin/kitty-ssh |
设置可执行权限
1 | chmod +x ~/.local/bin/kitty-ssh |
依赖说明:
sshpass:需要单独安装(brew install sshpass),用于自动填充 SSH 密码pass:用于安全存储和管理服务器密码,详见下文配置- 如果选择不使用密码管理,也可以将脚本中的密码获取部分替换为直接连接
接下来配置 Kitty 的快捷键来执行这个脚本。我设置的是 cmd+shift+h,在 Kitty 的配置文件(通常位于 ~/.config/kitty/kitty.conf)中添加以下内容:
1 | map cmd+shift+h launch --type=tab --hold --cwd=current fish -lc "kitty-ssh" |
配置参数说明:
map cmd+shift+h:定义快捷键为 Command+Shift+Hlaunch:启动一个新程序--type=tab:在新标签页中打开(可选值:tab、window、overlay等)--hold:命令执行完毕后保持标签页打开,不会自动关闭--cwd=current:使用当前工作目录fish -lc "kitty-ssh":使用 fish shell 执行kitty-ssh命令
Shell 说明:上述配置使用 fish shell,如果你在使用其他 shell(如 zsh 或 bash),请将
fish -lc替换为zsh -lc或bash -lc。如果直接执行脚本(确保脚本有执行权限且在 PATH 中),也可以简写为kitty-ssh。
2. 通过 pass 管理多台服务器密码
为了安全地存储和管理多台服务器的 SSH 密码,我们使用 pass。这是一个命令行密码管理工具,使用 GPG 加密来安全存储密码。
Mac 用户安装 pass:
1 | brew install pass |
2.1 初始化 GPG 密钥
pass 依赖 GPG 进行加密,首先需要生成一个 GPG 密钥对:
1 | gpg --full-generate-key |
交互式配置过程如下:
- 选择密钥类型:输入
1选择RSA and RSA(默认选项) - 密钥长度:输入
4096(推荐,更安全)或直接回车使用默认值2048 - 密钥有效期:输入
0表示永不过期,或输入如1y(1年)、2y(2年)等 - 确认以上信息正确:输入
y确认 - 输入用户信息:
- 真实姓名:例如
John Doe - 电子邮件:例如
john@example.com - 注释:可选,留空或填写有意义的说明
- 真实姓名:例如
- 确认:检查信息无误后输入
o确认 - 设置 passphrase:输入一个密码来保护你的 GPG 私钥

查看已生成的 GPG 密钥:
1
2 gpg --list-secret-keys # 列出私钥
gpg --list-public-keys # 列出公钥输出的
sec rsa4096后面那串字符即为密钥 ID,通常是 8 位或 16 位的十六进制数。
2.2 初始化 pass 密码库
生成 GPG 密钥后,需要初始化 pass 密码库,使其与你的 GPG 密钥关联:
1 | # 使用 GPG 用户邮箱初始化 |
执行后,pass 会在 ~/.password-store/ 目录下创建加密的密码存储库。
验证初始化是否成功:
1 pass # 列出所有已存储的密码
2.3 配置 SSH Config 文件
在 ~/.ssh/config 文件中定义要连接的服务器。这个文件用于 SSH 客户端的默认配置,可以让 SSH 连接更加便捷。
1 | # 编辑 SSH 配置文件 |
添加服务器配置:
1 | # 服务器 1 的配置 |
配置项说明:
Host:连接时使用的主机别名,可以自定义HostName:服务器的真实地址(IP 或域名)User:SSH 登录用户名Port:SSH 服务端口IdentityFile:(可选)指定私钥文件路径ServerAliveInterval:(可选)保持连接的存活时间间隔ForwardAgent:(可选)是否转发 SSH 代理
2.4 存储服务器密码
现在可以存储各服务器的 SSH 密码了。kitty-ssh 脚本中使用的路径格式是 pass ssh/$host,因此存储时需要按照 ssh/主机名 的路径格式来存放。
1 | # 为 server1 存储密码 |
执行上述命令后,会打开默认编辑器(如 vim、nano 或 VS Code),只需输入该服务器的 SSH 密码即可。保存后,pass 会自动使用 GPG 加密存储。
查看已存储的密码:
1
2
3 pass # 列出所有密码
pass ssh/server1 # 查看 server1 的密码(需要输入 GPG 密钥密码)
pass ls ssh/ # 只列出 ssh 分类下的密码
安全提示:
- GPG 密钥密码就是你的「主密码」,请务必记住
- 建议定期备份 GPG 私钥:
gpg --export-secret-keys > backup.gpg- 不要将 SSH 密码明文存储在任何地方
3. 测试最终效果
完成以上所有配置后,按下 cmd+shift+h,你将看到 fzf 交互界面。输入关键字(如 server1)筛选目标主机,按回车即可自动连接。

4. 使用 kitten + 密钥登录(进阶)
上述方案适用于需要密码登录的场景。如果你有直接访问服务器的权限,更推荐使用 SSH 密钥认证,Kitty 提供了更强大的集成方案。
Kitty 内置的 kitten ssh 命令可以替代系统自带的 ssh 命令,提供更多高级功能:
- SSH 代理转发
- 更好的终端仿真
- 自动密钥加载
1 | # 使用 kitten 连接(替换原脚本中的 ssh 命令) |
结合本方案的 fzf 交互界面,只需修改 kitty-ssh 脚本的最后几行:
1 | if [ -z "$password" ]; then |
提示:使用密钥登录后,脚本会优先使用密钥连接,无需输入密码,可以移除密码管理相关的依赖。
Mac下使用Kitty终端快速通过SSH连接服务器