#github #openssh #ssh-key #team #user-name #free #github-api

app aeneid

使用 GitHub 作为免费的、零运维的身份提供者

3 个不稳定版本

0.6.1 2021 年 8 月 3 日
0.6.0 2021 年 8 月 1 日
0.5.0 2021 年 8 月 1 日

#443身份验证

GPL-3.0-only

28KB
201

aeneid

aeneid-meme

GitHub 的 "团队" 功能基本上是一个免费、零运维的 身份提供者。让我们用它来验证 OpenSSH!你 可能 不应该在生产中使用它,但我无法阻止你。

是什么/如何?

  1. GitHub 提供了一个 API,以确保特定用户在特定组织中的特定团队中。GitHub 还提供了一个端点(/username.keys),用于检索某人的 SSH 密钥。
  2. OpenSSHd 提供了一种在用户登录前执行任意二进制文件的方法,然后读取其 stdout 以捕获 SSH 公共密钥。如果失败,则回退到 authorized_keys。通过运行 man sshd_config 获取更多信息。
  3. 将它们结合起来,就得到了这个项目。

安装

使用您常用的包管理器安装 aeneid。如果不可行,您可以使用 cargo。

deb(Debian、Ubuntu 等):从 GitHub 发布版下载,然后 dpkg -i /path/to/aeneid.deb

rpm(Fedora、RHEL 等):从 GitHub 发布版下载,然后 rpm -i /path/to/aeneid.rpm

nix(NixOS 等):即将推出(TM)...

货物(不推荐,请参阅常见问题解答):cargo install aeneid && cp $(whereis aeneid | cut -f 2 -d " ") /usr/local/bin && cargo uninstall aeneid && sudo /usr/local/bin/aeneid --init

配置

自动配置

如果您在安装部分使用了命令,则一切应该会自动配置。只需将凭据(以及/或覆盖)添加到/etc/aeneid/config.toml,然后运行sudo aeneid --init来自动配置您的sshd。如果您想手动配置sshd,请参阅手动配置部分关于sshd的段落。

手动配置

创建一个名为aeneid的新Unix用户,并将二进制文件放在新用户和sshd用户都可以读取/执行的地方。确保aeneid用户(并且只有aeneid用户)可以在/etc/aeneid中读取/写入/执行。

配置存储在/etc/aeneid/config.toml中。如果它不存在,请根据此存储库中的src/config.toml创建它。所有字段都有注释解释它们的作用。

您还需要在sshd_config(通常是/etc/ssh/sshd_config)中设置AuthorizedKeysCommand /path/to/bin/aeneidAuthorizedKeysCommandRunAs aeneid,以便OpenSSH知道从哪里获取密钥。

使用方法

如果您在overrides中指定了Unix用户名,请使用该用户名。如果您正在使用GitHub团队,并且您的用户名以数字开头,请使用一个_作为用户名前缀以登录。否则,您的用户名是您的GitHub用户名。有关更多信息,请参阅main.rs中的unix_to_github函数。

目前不支持自动创建用户,您需要在首次登录之前手动创建相应的用户(adduser username)。

$ # make sure ssh is setup with your GitHub keys, then...
$ ssh [email protected] # that's it

安全性

我已经考虑过安全性,但远远没有我想的那样多。我不建议在安全性重要的地方使用此工具。您负责确保...

  • /etc/aeneid及其所有子项的所有权属于一个单独的用户(称其为aeneid),并设置了严格的权限(chmod 600
  • AuthorizedKeysCommandRunAs设置为拥有/etc/aeneid的单独用户
  • 所有相关的GitHub账户都保持安全(多因素认证、良好的密码等)
  • 禁用了其他有问题的SSH配置选项(例如密码认证)
  • 您的SSH密钥没有受到损害
  • 可能还有我没有想到的其他事情

常见问题解答

你为什么这样做?

  • 真的 不想设置 LDAP。我 真的很不想 设置 LDAP。我 真的真的很不想 设置 LDAP。最后我还是设置了 LDAP,希望这对别人有帮助。

这个名字是怎么回事?

  • 我觉得这个名字很傻。你在接受一份礼物(免费,零操作 IdP),但在过程中,GitHub 可能 会静默地替换它返回的公钥并对你机器进行认证。所以如果你仔细看:特洛伊木马。

为什么不建议使用 cargo install

  • 不建议使用 Cargo 是因为 1) rustup 用户将二进制文件安装在一个 sshd 无法访问的位置 2) 配置文件将由 aeneid --init 脚本创建,而不是你的全局包管理器。

  • --init 脚本相当智能(它是幂等的),但只在少数常见的 Linux 发行版上进行了测试。它在其他地方工作几乎是不可能的。

依赖项

~7–23MB
~321K SLoC