#slack #account #manager #bot #daemon

app sacana

sacana (Slackbot As Computer Account maNAger) 是一个用于从 Slack 操作计算机上用户账户的 Slack 机器人。

1 个稳定版本

1.0.0 2020 年 10 月 1 日

#459 in 操作系统

MIT/Apache

58KB
1K SLoC

sacana (Slackbot As Computer Account maNAger)

sacana 是一个用于从 Slack 操作计算机上用户账户的 Slack 机器人。

通过在共用计算机(如研究室、圈子、公司内部等)上实施,可以在各团队 Slack 上执行用户账户的发行。对于任何人均可自由添加账户的共用计算机的运营,可以减少人工运营成本的好处。需要添加 bot 的权限和目标计算机的管理权限。

免责声明

由于软件的特性,请在重要安全环境中的实施时谨慎判断。开发方不对由软件的安装或使用引起的任何问题承担任何责任。请参阅以下“许可证”部分以获取详细信息。

运行环境

预计将在包含 systemd 的 Linux 上运行。已在 Ubuntu 16.04、Ubuntu 18.04 和 CentOS 7.2 上进行过测试。

安装

  1. 安装 Rust
    • 推荐使用最新的稳定版本。
  2. 使用 cargo build --release 进行构建。
  3. 根据 settings.json.sample 参考编写 settings.json
    • SLACK_API_TOKEN : 请在此处记录 bot 用 Slack API 令牌。
    • channels : 以列表形式记录要监视的频道名称。将监视所有记录的频道。
    • public_key_uri_format : 记录一个字符串,该字符串将 {} 替换为用户名,以便获取公开密钥的 URI。
    • host_list_uri : 记录可以获取主机列表的 URI。在这里,列表是每行记录主机名称的文本文件。
    • certificate_file (可选) : 如果需要添加 SSL 证书(例如,用于访问 host_list_uri 的位置),请记录证书文件(PEM 格式)的路径。如果不需要,则无需记录此选项。
  4. 执行 install.sh
    • 由于需要将服务注册到 systemd,因此需要 root 权限。
    • 如果要更改安装位置,则可以在执行 install.sh 时将安装路径指定到 INSTALL_DIR 环境变量中。
  5. 启动后,请确认已设置的频道收到“Hello, this is sacana@xxxx”(“xxxx”是主机名)的响应。
  6. (可选)在确认功能正常后,请在 /etc/ssh/sshd_config 中记录 PasswordAuthentication no
    • 由于该 bot 管理的账户可以通过公开密钥认证进行登录,因此出于安全考虑,建议关闭密码认证。

用法

在以下示例中,假设在主机名为 HOSTNAME 的计算机上使用以下 settings.json 执行操作,并在 Slack 上以 @computer-account-manager 的名称添加了 bot。

{
  "SLACK_API_TOKEN": "(Botユーザー @computer-account-manager のトークン)",
  "channels": ["computer-account"],
  "public_key_uri_format": "https://github.com/{}.keys",
  "host_list_uri": "https://example.net/host_list.txt"
}

此外,https://example.net/host_list.txt 的内容如下。

HOSTNAME
HOSTNAME2

创建新账户

  1. 请确认公开密钥已注册在 https://github.com/<您的ID>.keys。
    • 在这种设置中,当您使用 GitHub 的个人账户注册 SSH 密钥时,可以从 https://github.com/<您的ID>.keys 获取您的公开密钥。
    • 因此,在此设置中,需要将 Slack 的显示名称与 GitHub 的账户名称设置为相同。
      • 因此,在此设置中,需要将 Slack 的显示名称与 GitHub 的账户名称设置为相同。
    • 由于需要获取公开密钥,因此 public_key_uri_format 的 URI 不一定是 git 存储库托管服务的。
  2. @computer-account-manager create HOSTNAME 命令中,在 computer-account 通道中发言。
    • 与创建账户同时,还会从 public_key_uri_format 获取的公钥进行注册。
    • 创建的账户密码为空。
  3. 请确认是否可以通过SSH使用公钥认证进行登录。
    • 登录后,请使用 passwd 命令设置密码。
    • 如果登录失败,请执行以下键的更新。

更新现有账户的公钥

  1. 请确认公开密钥已注册在 https://github.com/<您的ID>.keys。
  2. computer-account 通道中,发出 @computer-account-manager update HOSTNAME 命令。
    • 注意:如果已存在 $HOME/.ssh/authorized_keys,则会被覆盖。
    • 与创建新账户相同,更新与您的Slack显示名称相同的账户的公钥。
  3. 请确认是否可以通过SSH登录。
    • 如果登录失败,请确认 https://github.com/<您的ID>.keys 中是否正确注册了公钥。

加入群组

  • 如果想要加入名为 GROUPNAME 的群组,请在 computer-account 通道中发出 @computer-account-manager join GROUPNAME HOSTNAME 命令以加入。
    • 注意:任何人都可以加入 sudo 群组或 wheel 群组,因此在不希望将管理权限赋予所有用户的环境中请务必注意使用。

检查slackbot是否在运行

  • computer-account 通道中发出 @computer-account-manager ping 命令时,将从运行的bot处收到 pong@HOSTNAME 的回复。

检查用法

  • 通过向 @computer-account-manager 发送DM中的 help 来查看帮助。
    • 为了查看此消息,需要确保最初在 host_list 中写出的主机上的bot服务正常运行。

重新启动服务

  • 以root权限执行 systemctl restart sacana

添加/删除管理目标计算机

  1. 更新主机列表。
    • 如果想要添加管理目标,请将新计算机的计算机名添加到列表中。
    • 如果想要排除管理目标,请从列表中删除目标计算机的计算机名。
    • 在此过程中,列表中最上面的主机将执行 help 命令等响应,因此请注意列表中最上面的主机名。
  2. 从从列表中删除的计算机上停止bot的服务。
    • 以root权限执行 systemctl stop sacana && systemctl disable sacana
  3. 在新添加到主机列表的计算机上安装和启动bot的服务。
  4. 在更新后的主机列表中所有计算机上重新启动bot的服务。
  5. 使用 @computer-account-manager ping 命令确认主机列表中所有计算机上的服务正常运行。
    • 如果从列表中删除的主机回复了,或者列表中列出的主机没有回复,请分别检查每个端点。

出现故障吗?

没有响应的命令

首先,请确认使用 @computer-account-manager ping 命令时是否返回了 pong

作为一个参考,如果超过1分钟也没有从目的计算机收到响应,则可能没有启动服务。在这种情况下,请按照以下步骤重新启动服务。

  1. 以root权限执行 systemctl restart sacana。如果重新启动后收到了 "Hello, this is sacana@xxxx" 的响应,请重新输入命令。
  2. 如果重新启动没有响应,请使用syslog检查错误的详细信息并修复。
    • 默认情况下,错误详细信息在 /var/log/syslog* 中,请使用 grep sacana 进行检查。
  3. 如果出现无法解决的(无法修复的)错误,请报告问题。

命令是 help 的情况 / 命令错误的情况

DM中的 help 命令或命令错误的回复由列表中最上面的主机执行。在这种情况下,请检查列表中最上面的主机。即使主机本身正常,主机列表中的记录也可能由于类型错误等错误而错误。

无法创建账户

例如,如果指定 public_key_uri_format 的链接是GitHub,则如果Slack的显示名称与GitHub的账户名不同,则无法创建账户。在这种情况下,请从Slack的配置文件中设置适当的显示名称。另外,如果GitHub上没有注册公钥,也无法登录。在这种情况下,首先在GitHub上注册公钥,然后使用 @computer-account-manager update HOSTNAME 在HOSTNAME上更新账户的公钥。

许可证

本项目是

的双重许可证。

依赖项

~9-22MB
~341K SLoC