2 个版本
0.1.1 | 2020 年 3 月 28 日 |
---|---|
0.1.0 | 2020 年 3 月 23 日 |
#2660 in 命令行工具
28KB
310 行
Super Key Loader
一个用于将您的系统上的所有 GitHub SSH 公钥复制的轻量级工具。
工作原理
Superkeyloader 是一个简单的 Rust CLI 二进制程序,它从 GitHub 下载您的 SSH 密钥并将其附加到您的 ~/.ssh/authorized_keys
文件。
在设置新机器(VPS、家用服务器、Pi 等)时使用它,以同时授权所有 SSH 密钥。
为什么?
几个月前,我安装了 Ubuntu Server 19.10。在安装过程中,它要求我输入 GitHub 用户名,并将 GitHub 中的 SSH 公钥复制到我的用户授权密钥中。这是一个非常好的体验,我在第一次启动时设置了强密码并禁用了 SSH 密码登录。这既安全又方便。
我寻找一个可以完成同样任务的工具,但什么都没有找到。如果您知道这样的工具,请告诉我。
所以我决定自己构建一个。
第一个实现是一个简单的 Python CLI,使用 click
构建。很酷且易于构建。它需要一个 Python 解释器,它安装在大多数现代系统上,但并非所有系统。我需要一个单一的小型二进制文件,而打包 Python 工具并不实用。
学习 Rust 已经在我的待办事项列表上很久了,而这个项目似乎是一个很好的学习机会。
结果就是这个小型 Rust 工具。
安装
-
使用 Cargo 安装(需要 Rust 工具链)
cargo install superkeyloader
-
从 发布页面 下载二进制文件并将其添加到您的
$PATH
中。 适用于 "x86" 的 Linux 和 macOS
注意: 以
gnu
结尾的 Linux 二进制文件需要一些 GNU 依赖项。如果您想要一个无外部依赖项的完全自包含的二进制文件,请下载musl
版本。
用法
superkeyloader
USAGE:
superkeyloader [FLAGS] [OPTIONS] <username>
FLAGS:
-h, --help
Prints help information
-m, --human
-j, --json
-q, --quiet
Pass many times for less log output
-p, --stdout
-V, --version
Prints version information
-v, --verbose
Pass many times for more log output
By default, it'll only report errors. Passing `-v` one time also prints warnings, `-vv` enables info
logging, `-vvv` debug, and `-vvvv` trace.
OPTIONS:
-o, --output <path>
[default: ~/.ssh/authorized_keys]
ARGS:
<username>
路线图
- 构建 ARM 二进制文件 重要
- 改进文档并发布
- 添加简单的安装脚本
- 添加对外部机器(如
ssh-copy-id
)的支持 - 添加对GitLab和BitBucket的支持
- 在Homebrew上发布
- 在其他包管理器上发布
- 添加Windows支持并经过实际测试(如果有人关心的话)
贡献
可能没有人会真正阅读这些内容,但如果你意外地来到了这里,并且想要添加一些功能、改进我的代码、提出新的功能建议,或者更有可能的是,为了修复bug而提交一个issue,等等,无论如何,你都可以提交PR、填写issue或者给我发邮件。
我也非常感兴趣于实际测试用例和用法场景。如果你觉得这个小型实用程序对你有帮助,或者你有任何改进它的想法,请告诉我。
环境设置
开发依赖和其他小任务由 just
处理,这是一个基于Rust的 make
的替代品。
开始贡献的步骤
- 在你的机器上安装Rust工具链。 官方指南。
- 安装
just
cargo install just
- 克隆此仓库(或fork并克隆)。
- 设置开发环境
它将安装just setup-dev-env
convco
- 检查提交是否遵循约定式提交规范(我选择这个而不是commitlint
以移除非Rust依赖项)。rusty-hook
- 安装git钩子grcov
- 来自Mozilla的代码覆盖率工具(我在macOS上使用它以获取本地代码覆盖率报告,不是严格必需的)rust nightly
- Rust夜间构建工具链,由grcov
需要clippy
- Rust代码检查器(cargo
组件)rustfmt
- Rust代码格式化工具(cargo
组件)并设置git钩子。
Git钩子
此仓库具有git钩子,用于在开发人员端强制执行良好的格式化、代码检查和测试(感谢 rusty-hook
),相同的规则也将应用于GitHub Actions。
注意:
rusty-hook
应在您首次运行cargo test
时设置钩子。如果它不起作用或者经过一段时间后停止工作,您可以使用just install-hooks
再次设置钩子。
约定式提交
此仓库遵循 Conventional Commits,并使用 convco
来强制执行它们(在开发人员端)。每次提交时,convco
都由 commit-msg
钩子运行。
注意: 它由
just setup-dev-env
安装
...在CI上
所有这些约定在CI上也得到强制执行。使用 commitlint-github-action
。
操作使用 commitlint
,因此还有一个非常基本的配置文件。如果您使用 commitlint
,它将使用该文件。
持续集成/交付
本项目使用GitHub Actions进行持续集成和构建发布版本。配置基于Mean Bean CI
模板。代码格式化、代码检查和提交信息规则(见上文)也在持续集成中强制执行。
感谢出色的action-rs
项目。
代码覆盖率
代码覆盖率由action-rs/grcov
在每次推送时计算,并上传到Coveralls,您可以在历史中查看覆盖率。
许可证
本项目采用MIT许可证。
依赖项
~11-22MB
~336K SLoC