1 个稳定版本
1.0.0 | 2020 年 10 月 1 日 |
---|
#459 in 操作系统
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 上进行过测试。
安装
- 安装 Rust 。
- 推荐使用最新的稳定版本。
- 使用
cargo build --release
进行构建。 - 根据
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 格式)的路径。如果不需要,则无需记录此选项。
- 执行
install.sh
。- 由于需要将服务注册到 systemd,因此需要 root 权限。
- 如果要更改安装位置,则可以在执行
install.sh
时将安装路径指定到INSTALL_DIR
环境变量中。
- 启动后,请确认已设置的频道收到“Hello, this is sacana@xxxx”(“xxxx”是主机名)的响应。
- (可选)在确认功能正常后,请在
/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
创建新账户
- 请确认公开密钥已注册在 https://github.com/<您的ID>.keys。
- 在这种设置中,当您使用 GitHub 的个人账户注册 SSH 密钥时,可以从 https://github.com/<您的ID>.keys 获取您的公开密钥。
- 因此,在此设置中,需要将 Slack 的显示名称与 GitHub 的账户名称设置为相同。
- 因此,在此设置中,需要将 Slack 的显示名称与 GitHub 的账户名称设置为相同。
- 由于需要获取公开密钥,因此
public_key_uri_format
的 URI 不一定是 git 存储库托管服务的。
- 在
@computer-account-manager create HOSTNAME
命令中,在computer-account
通道中发言。- 与创建账户同时,还会从
public_key_uri_format
获取的公钥进行注册。 - 创建的账户密码为空。
- 与创建账户同时,还会从
- 请确认是否可以通过SSH使用公钥认证进行登录。
- 登录后,请使用
passwd
命令设置密码。 - 如果登录失败,请执行以下键的更新。
- 登录后,请使用
更新现有账户的公钥
- 请确认公开密钥已注册在 https://github.com/<您的ID>.keys。
- 在
computer-account
通道中,发出@computer-account-manager update HOSTNAME
命令。- 注意:如果已存在
$HOME/.ssh/authorized_keys
,则会被覆盖。 - 与创建新账户相同,更新与您的Slack显示名称相同的账户的公钥。
- 注意:如果已存在
- 请确认是否可以通过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
。
添加/删除管理目标计算机
- 更新主机列表。
- 如果想要添加管理目标,请将新计算机的计算机名添加到列表中。
- 如果想要排除管理目标,请从列表中删除目标计算机的计算机名。
- 在此过程中,列表中最上面的主机将执行
help
命令等响应,因此请注意列表中最上面的主机名。
- 从从列表中删除的计算机上停止bot的服务。
- 以root权限执行
systemctl stop sacana && systemctl disable sacana
。
- 以root权限执行
- 在新添加到主机列表的计算机上安装和启动bot的服务。
- 在更新后的主机列表中所有计算机上重新启动bot的服务。
- 使用
@computer-account-manager ping
命令确认主机列表中所有计算机上的服务正常运行。- 如果从列表中删除的主机回复了,或者列表中列出的主机没有回复,请分别检查每个端点。
出现故障吗?
没有响应的命令
首先,请确认使用 @computer-account-manager ping
命令时是否返回了 pong
。
作为一个参考,如果超过1分钟也没有从目的计算机收到响应,则可能没有启动服务。在这种情况下,请按照以下步骤重新启动服务。
- 以root权限执行
systemctl restart sacana
。如果重新启动后收到了 "Hello, this is sacana@xxxx" 的响应,请重新输入命令。 - 如果重新启动没有响应,请使用syslog检查错误的详细信息并修复。
- 默认情况下,错误详细信息在
/var/log/syslog*
中,请使用grep sacana
进行检查。
- 默认情况下,错误详细信息在
- 如果出现无法解决的(无法修复的)错误,请报告问题。
命令是 help
的情况 / 命令错误的情况
DM中的 help
命令或命令错误的回复由列表中最上面的主机执行。在这种情况下,请检查列表中最上面的主机。即使主机本身正常,主机列表中的记录也可能由于类型错误等错误而错误。
无法创建账户
例如,如果指定 public_key_uri_format
的链接是GitHub,则如果Slack的显示名称与GitHub的账户名不同,则无法创建账户。在这种情况下,请从Slack的配置文件中设置适当的显示名称。另外,如果GitHub上没有注册公钥,也无法登录。在这种情况下,首先在GitHub上注册公钥,然后使用 @computer-account-manager update HOSTNAME
在HOSTNAME上更新账户的公钥。
许可证
本项目是
的双重许可证。
依赖项
~9-22MB
~341K SLoC