2个不稳定版本
0.3.0 | 2022年7月10日 |
---|---|
0.2.0 | 2021年7月26日 |
#613 in 配置
59KB
1K SLoC
设置!
设置!(SMU)是一个基于Ansible的配置服务器简单实现。其主要目标是尽量减少我们试图配置的客户端所需的要求。实际上,他们只需要一个SSH服务器和客户端。
想法是
- 客户端打开到配置服务器SMU的SSH连接。
- 该服务器会提示一些信息。
- 客户端将自动配置!
用法
在您要配置的客户端上,只需使用以下方式连接到SMU服务器
$ ssh -R 0:localhost:22 smu@smu-server
Allocated port 44561 for remote forward to localhost:22
Welcome to Set Me Up!
-R
选项允许SMU进行反向隧道回您的系统进行配置。为了使其余部分正常工作,您将进入一个小向导
- 首先,您需要告诉SMU分配给反向隧道的端口号。在上面的例子中,这是44561。
- 然后,SMU将要求您提供在您的机器上要使用的用户名。根据您要配置的内容,您可能需要在此处提供一个sudoer。
- 最后,SMU将向您发送一个ECDSA密钥对的公钥。您需要确保此密钥对可以用于使用上述用户名登录到您的机器。通常,这意味着将公钥添加到该用户的~/.ssh/authorized_keys中。
完成此操作后,SMU将测试所有内容以确保它可以访问到您的系统。如果一切顺利,您将通过提示配置您的配置。这是您选择要在您的机器上运行的Ansible playbooks的地方。可用的playbooks取决于SMU服务器的配置。
请注意,在此处,设置!被配置为smu用户的shell,这使得命令更短。如果您的客户端已经在您的服务器上(并且具有SSH访问权限),还有其他选项。
基本服务器设置
让我们来安装和配置设置!
安装
设置!是用Rust编写的。下载、编译、测试和安装如下所示
$ git clone https://gitlab.com/julienjpk/setmeup
$ cd setmeup
$ cargo test
$ cargo build --release
$ sudo install -m 755 target/release/setmeup /usr/local/bin
设置客户端访问
您如何在您的服务器上设置SMU完全取决于您。如果您的客户端已经在您的服务器上(并且具有SSH访问权限),它们可以使用这些账户运行SMU
$ ssh -tR 0:localhost:22 bob@smu-server setmeup
在这种情况下,无需进一步设置客户端访问。
如果情况不是这样,您可以为您的客户端创建一个smu用户。
# useradd -md /var/lib/setmeup
然后,您可以像对其他用户一样授予smu用户访问权限(例如,在/var/lib/setmeup/.ssh/authorized_keys或passwd smu
中)。
限制smu用户
如果您想强制smu用户只使用SMU,不在您的系统上运行其他任何东西,我建议将以下内容添加到您的SSH服务器配置中
# /etc/ssh/sshd_config
Match User smu
ForceCommand /usr/local/bin/setmeup
之后请记得重新加载您的SSH配置
$ systemctl reload sshd
配置供应源和选项
Set Up!会在以下位置按顺序查找其配置文件
- 通过
-c
开关提供的路径 - SETMEUP_CONF环境变量。
- $XDG_CONFIG_DIR/setmeup/setmeup.yml,相对于客户端登录的用户。
- ~/.setmeup.yml,同样也是用户依赖的。
- /etc/setmeup/setmeup.yml
- /etc/setmeup.yml
选项1、3和4使得每个用户都可以拥有自己的SMU配置。请注意,根据规范,XDG_CONFIG_DIR默认为~/.config。它们还允许您在/var/lib/setmeup中配置SMU(如果之前选择了该选项)。选项2如果您想通过/etc/environment、~/.pam_environment或~/.ssh/environment来配置SMU,则很有用。其余的都是我认为合理的默认值。
配置文件本身是YAML。
sources:
some_local_source:
path: "/etc/setmeup/playbooks"
playbook_match: "^public/.+\.ya?ml$"
some_git_repository:
path: "~/some_git_repository"
recurse: yes
pre_provision: "git pull"
ansible_playbook:
path: "/usr/local/bin/ansible-playbook"
env:
- name: "ANSIBLE_CONFIG"
value: "ansible.cfg"
- name: "ANSIBLE_ROLES_PATH"
value: "roles"
SMU在各个源的顶层目录中查找Ansible剧本(..ya?ml$
),除非设置了recurse
。如果需要,可以使用playbook_match
设置来设置不同的REGEX。REGEX与源根目录的相对文件路径相匹配,这意味着您可以在子目录中进行匹配。您还可以使用ansible_playbook
字典来自定义如何对每个源调用ansible-playbook
。请注意,SMU始终从您的源根目录运行ansible-playbook
。最后,可以将pre_provision
参数设置为在供应客户端之前运行命令。如果您将源作为git仓库,并希望在查找剧本之前更新它,这非常有用。
关于
Set Up!是我想到的一个小项目,因为我总是无法在所有机器之间同步我的dotfiles。那里有很好的dotfiles管理选项,但我感觉像写点东西来利用Ansible的功能。它还使我能够快速设置一些基本的服务器应用程序,无论我在哪里都无法通过SSH直接访问。(可能还有许多优秀的Ansible供应服务器...
Set Up!是根据AGPL条款许可的。
依赖
~17-29MB
~480K SLoC