58 lines
2.4 KiB
Markdown
58 lines
2.4 KiB
Markdown
# Client
|
|
|
|
Основная суть - кидает на известный по ip/домену сервак свой ключ и базовую информацию о себе: hostname, местное время (что-то ещё?)
|
|
|
|
В ответ может получить как простое "ок", так и команду для выполнения
|
|
|
|
Запросы на сервер будет кидать с некоторой частотой, постепенно возрастающей, но резко снижающейся при получении команды в ответе (вдруг надо ещё что-то выполнить)
|
|
|
|
Есть установление нижнего предела на частоту (условная 1/минута)
|
|
|
|
Пример работы
|
|
|
|
```
|
|
...
|
|
client -> server: hello!, i'm $(hostname), uuid= , ts=
|
|
server -> client: ok, 200
|
|
*waits 45s*
|
|
client -> server: hello!, i'm $(hostname), uuid= , ts=
|
|
server -> client: ok, 200
|
|
*waits 46s*
|
|
client -> server: hello!, i'm $(hostname), uuid= , ts=
|
|
server -> client: ok, execute "ip a", 200
|
|
client: *execute*
|
|
client -> server: hello!, i'm $(hostname), uuid= , ts=, stdout= , stderr= , ...
|
|
*waits 23s*
|
|
```
|
|
|
|
Возможно нужна доп инфа о работе команды (код ошибки как минимум)
|
|
|
|
+ возможно на клиенте стоит ограничить набор допустимых команд
|
|
+ стоит явно задуматься о шифровании/идентификации сервера
|
|
|
|
## Разрешённые команды
|
|
|
|
Клиент исполняет только команды, описанные в локальном YAML config-файле.
|
|
Серверу отправляются только `name` и `description`; поле `cmd` остаётся только
|
|
на клиенте и не управляется сервером.
|
|
|
|
Пример:
|
|
|
|
```yaml
|
|
server_url: "http://127.0.0.1:5852"
|
|
client_id: "linux-client"
|
|
client_token: "change-me-client-token"
|
|
allowed_commands:
|
|
- name: hostname
|
|
description: "Get the hostname of the client machine"
|
|
cmd: "hostname"
|
|
- name: network_interfaces
|
|
description: "Get network interface information"
|
|
cmd: "ip addr show"
|
|
logging_level: "INFO"
|
|
```
|
|
|
|
Файл ищется как `nexus.yml`/`nexus.yaml` в текущей директории, затем в
|
|
`$XDG_CONFIG_HOME`, затем в `~/.config`, затем как
|
|
`~/.config/nexus/config.yml`/`.yaml`.
|