如何在客户端实现ssh的免密登录?

我受够了记 IP 和密码,于是用 Rust 写了一个 SSH 管家

管理 10 台服务器后,我终于把 ssh user@10.0.0.1 -p 2222 -i ~/.ssh/some_key 缩减成了 sk prod


你每天在重复什么?

bash 复制代码
ssh root@192.168.1.100 -p 2222
# 输入密码...
# 密码错了,再来
ssh root@192.168.1.100 -p 2222 -i ~/.ssh/keys/prod_key
# 等等,这个服务器是哪个 key 来着?
cat ~/.ssh/config
# ...

管理 5 台以上的服务器,每次连接都要回忆 IP、端口、用户名、密钥文件路径。更别提换电脑后重新配置的噩梦。

sk:一条命令解决

bash 复制代码
# 添加一次
sk add prod -H 192.168.1.100 -u root -p MyPassword

# 之后每天只需
sk prod

没了。就这两个命令。

它做了什么?

sk add 做了 5 件事:

  1. 测试连接(连不上直接拒绝,不写入无效配置)
  2. 写入标准 ~/.ssh/config(你仍然可以用 ssh prod
  3. 加密存储密码到系统钥匙串
  4. 记住你的 IP、端口、用户名
  5. 下次 sk prod 自动使用存储的凭据

sk prod 做了 1 件事:

把你连到服务器。不提示密码,不要求记 IP,不让你选密钥文件。就一个字:快。

不只是密码

如果你的服务器已经配置了免密登录:

bash 复制代码
# 用已有密钥
sk add prod -H 10.0.0.1 -u root -i ~/.ssh/prod_key

# 或者让 sk 帮你生成密钥并推送到服务器
sk add prod -H 10.0.0.1 -u root -k

日常管理

bash 复制代码
sk list                    # 所有服务器一览
sk test prod               # 测试连通性
sk remove prod staging     # 批量删除
sk doctor                  # 健康检查
sk completion install      # 一键开启 Tab 补全

安全吗?

  • 密码存储在系统钥匙串(macOS Keychain / Windows Credential Manager / Linux Secret Service)
  • 降级方案使用 AES-256-GCM + Argon2id(19MB 内存成本防暴力破解)
  • 密钥绑定到机器指纹------密码文件复制到其他机器无法解密
  • 纯 ssh2 协议实现,不依赖外部 ssh 二进制

安装

bash 复制代码
cargo install --git https://github.com/scliangx/sk.git

需要 Rust 1.70+ 和 OpenSSH 客户端。macOS / Linux / Windows 全平台支持。

10 秒 vs 3 秒

复制代码
传统方式:
  $ ssh root@192.168.1.100 -p 2222 -i ~/.ssh/prod_key
  (回忆 IP → 回忆端口 → 回忆密钥路径 → 总共 10+ 秒)

sk 方式:
  $ sk prod
  (3 秒,包括 SSH 握手时间)

每天连接 20 次服务器,一个月省下 20 * 7 * 30 = 4200 秒 ≈ 70 分钟 。一年省下 14 小时

这还只是连接。算上添加、删除、测试、检查配置的时间,sk 省下的更多。

项目状态

sk 目前处于 v0.1.0 早期开发阶段。核心功能稳定(156 个测试覆盖),计划中的 sync 等功能还在开发。

欢迎 Star, Issue, PR。

GitHub: https://github.com/scliangx/sk

相关推荐
xywww1688 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
梦想的颜色11 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
donoot13 小时前
Linux系统下图书馆级电子书全自动标准化分类整理完整实施方案
大数据·linux·运维·电子书管理
ITKEY_14 小时前
macOS brew 安装的nginx 文件在哪里?
运维·nginx·macos
Elastic 中国社区官方博客14 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
第一程序员14 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
Tim_Van15 小时前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
孫治AllenSun16 小时前
【Nginx】配置参数和使用案例
运维·nginx
IT笔记16 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
啵啵鱼爱吃小猫咪17 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu