keysloth 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Appraisals +9 -0
- data/CHANGELOG.md +30 -1
- data/LICENSE +21 -0
- data/README.md +37 -8
- data/gemfiles/thor_1.0.gemfile +18 -0
- data/gemfiles/thor_1.3.gemfile +18 -0
- data/keysloth.gemspec +5 -5
- data/keysloth.png +0 -0
- data/lib/keysloth/cli.rb +58 -53
- data/lib/keysloth/file_manager.rb +34 -12
- data/lib/keysloth/git_manager.rb +31 -5
- data/lib/keysloth/version.rb +1 -1
- data/lib/keysloth.rb +17 -4
- data/promts/main/rules.md +16 -0
- data/promts/outdated/feature_wildcard_extensions.md +62 -0
- data/promts/outdated/fix_backups.md +49 -0
- data/promts/outdated/fix_config_file.md +47 -0
- data/promts/outdated/fix_ssh.md +77 -0
- data/promts/outdated/thor-updates.md +38 -0
- data/promts/task_lists_for_human/release_task_list.md +60 -0
- data/{task → promts/task_lists_for_human}/test_plan.md +8 -89
- metadata +33 -16
- data/task/cr.md +0 -59
- /data/{task → promts/main}/task.md +0 -0
- /data/{task/ragged_removing.md → promts/outdated/feature_ragged_removing.md} +0 -0
- /data/{task → promts/outdated}/plan.md +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Test plan: Проверка работы gem KeySloth (шаг за
|
|
1
|
+
# Test plan: Проверка работы gem KeySloth (шаг за шагом, как для новичка)
|
|
2
2
|
|
|
3
3
|
## Цели
|
|
4
4
|
- Подтвердить, что все основные команды работают: `init`, `pull`, `push`, `status`, `validate`, `restore`, `version`, `help`.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## 1. Клонирование проекта и установка зависимостей
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
# перейдите в папку проекта
|
|
22
22
|
cd keysloth
|
|
23
23
|
bundle install
|
|
24
24
|
```
|
|
@@ -28,14 +28,10 @@ bundle install
|
|
|
28
28
|
# Тесты
|
|
29
29
|
bundle exec rake spec
|
|
30
30
|
|
|
31
|
-
# Линтинг
|
|
32
|
-
bundle exec rake rubocop
|
|
33
|
-
```
|
|
34
|
-
|
|
35
31
|
## 3. Сборка и локальная установка gem
|
|
36
32
|
```bash
|
|
37
33
|
gem build keysloth.gemspec
|
|
38
|
-
gem install ./keysloth-0.
|
|
34
|
+
gem install ./keysloth-0.2.0.gem # подставить текущую версию вместо 0.2.0
|
|
39
35
|
|
|
40
36
|
# Проверка установки и базовых команд
|
|
41
37
|
keysloth version
|
|
@@ -50,27 +46,8 @@ ssh -V
|
|
|
50
46
|
```
|
|
51
47
|
|
|
52
48
|
## 4. Подготовка тестового удалённого репозитория (SSH)
|
|
53
|
-
Вариант A (GitHub через веб-интерфейс):
|
|
54
49
|
- Создайте приватный репозиторий, например `keysloth-secrets-test`.
|
|
55
|
-
- Выберите «Add a README» при создании, чтобы в репозитории сразу была ветка `main
|
|
56
|
-
|
|
57
|
-
Вариант B (через локальный git и push):
|
|
58
|
-
```bash
|
|
59
|
-
mkdir -p ~/tmp/keysloth-secrets-remote
|
|
60
|
-
cd ~/tmp/keysloth-secrets-remote
|
|
61
|
-
git init
|
|
62
|
-
echo "# secrets" > README.md
|
|
63
|
-
git add README.md
|
|
64
|
-
git commit -m "init"
|
|
65
|
-
git branch -M main
|
|
66
|
-
git remote add origin git@github.com:<YOUR_USER>/keysloth-secrets-test.git
|
|
67
|
-
git push -u origin main
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Проверьте доступ по SSH:
|
|
71
|
-
```bash
|
|
72
|
-
ssh -T git@github.com
|
|
73
|
-
```
|
|
50
|
+
- Выберите «Add a README» при создании, чтобы в репозитории сразу была ветка `main`
|
|
74
51
|
|
|
75
52
|
## 5. Подготовка рабочего каталога и начальной конфигурации
|
|
76
53
|
```bash
|
|
@@ -78,6 +55,7 @@ mkdir -p ~/tmp/keysloth-playground
|
|
|
78
55
|
cd ~/tmp/keysloth-playground
|
|
79
56
|
|
|
80
57
|
# Инициализация проекта под KeySloth (создаст .keyslothrc, директорию секретов, обновит .gitignore)
|
|
58
|
+
# Этот и остальные шаги этого пункта ниже - делать только если репозиторий в пункте 4 до этого ни разу не создавался
|
|
81
59
|
keysloth init -r git@github.com:chausovSurfStudio/keysloth-secrets-test.git -b main -d ./secrets
|
|
82
60
|
|
|
83
61
|
# Проверим, что создалось
|
|
@@ -88,32 +66,7 @@ cat .gitignore
|
|
|
88
66
|
Ожидаемо: `.keyslothrc` содержит `repo_url`, `branch`, `local_path`; в `.gitignore` добавлены `secrets/` и `.keyslothrc`.
|
|
89
67
|
|
|
90
68
|
## 6. Подготовка тестовых «секретов»
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
mkdir -p secrets/certificates secrets/config
|
|
94
|
-
|
|
95
|
-
# JSON
|
|
96
|
-
cat > secrets/config/app.json << 'JSON'
|
|
97
|
-
{
|
|
98
|
-
"apiKey": "demo-123",
|
|
99
|
-
"endpoint": "https://api.example.com",
|
|
100
|
-
"featureFlags": {"newUI": true}
|
|
101
|
-
}
|
|
102
|
-
JSON
|
|
103
|
-
|
|
104
|
-
# CER (PEM)
|
|
105
|
-
cat > secrets/certificates/dev.cer << 'CER'
|
|
106
|
-
-----BEGIN CERTIFICATE-----
|
|
107
|
-
MIIBkTCB+wI...FAKE...FOR...TEST...
|
|
108
|
-
-----END CERTIFICATE-----
|
|
109
|
-
CER
|
|
110
|
-
|
|
111
|
-
# P12 (минимальный валидный заголовок: первый байт 0x30)
|
|
112
|
-
printf "\x30\x82\x05\x10\x02\x01\x03\x30" > secrets/certificates/dev.p12
|
|
113
|
-
|
|
114
|
-
# Mobile provisioning (XML/plist признак)
|
|
115
|
-
echo '<?xml version="1.0" encoding="UTF-8"?><plist version="1.0"></plist>' > secrets/dev.mobileprovisioning
|
|
116
|
-
```
|
|
69
|
+
Создать/скопировать в заранее подготовленную папку набор необходимых "серкретов"
|
|
117
70
|
|
|
118
71
|
## 7. Первая отправка секретов (push)
|
|
119
72
|
```bash
|
|
@@ -141,10 +94,6 @@ keysloth pull \
|
|
|
141
94
|
-p "$SECRET_PASSWORD" \
|
|
142
95
|
-b main \
|
|
143
96
|
-d ./secrets
|
|
144
|
-
|
|
145
|
-
# Проверим содержимое
|
|
146
|
-
ls -la ./secrets ./secrets/certificates
|
|
147
|
-
cat ./secrets/config/app.json
|
|
148
97
|
```
|
|
149
98
|
|
|
150
99
|
Ожидаемо: файлы восстановлены и читаемы.
|
|
@@ -216,38 +165,7 @@ keysloth pull -p "$SECRET_PASSWORD"
|
|
|
216
165
|
keysloth push -p "$SECRET_PASSWORD" -m "update via rc"
|
|
217
166
|
```
|
|
218
167
|
|
|
219
|
-
## 15.
|
|
220
|
-
Создайте секреты репозитория: `SSH_PRIVATE_KEY`, `SECRET_PASSWORD`. Затем workflow:
|
|
221
|
-
```yaml
|
|
222
|
-
name: KeySloth smoke
|
|
223
|
-
on: [workflow_dispatch]
|
|
224
|
-
jobs:
|
|
225
|
-
check:
|
|
226
|
-
runs-on: ubuntu-latest
|
|
227
|
-
steps:
|
|
228
|
-
- uses: actions/checkout@v4
|
|
229
|
-
- name: Setup Ruby
|
|
230
|
-
uses: ruby/setup-ruby@v1
|
|
231
|
-
with:
|
|
232
|
-
ruby-version: '3.2'
|
|
233
|
-
- name: Setup SSH key
|
|
234
|
-
env:
|
|
235
|
-
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
236
|
-
run: |
|
|
237
|
-
mkdir -p ~/.ssh
|
|
238
|
-
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
|
|
239
|
-
chmod 600 ~/.ssh/id_rsa
|
|
240
|
-
ssh-keyscan github.com >> ~/.ssh/known_hosts
|
|
241
|
-
- name: Install KeySloth
|
|
242
|
-
run: gem install keysloth
|
|
243
|
-
- name: Pull secrets
|
|
244
|
-
env:
|
|
245
|
-
SECRET_PASSWORD: ${{ secrets.SECRET_PASSWORD }}
|
|
246
|
-
run: |
|
|
247
|
-
keysloth pull -r git@github.com:<YOUR_USER>/keysloth-secrets-test.git -p "$SECRET_PASSWORD"
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## 16. Завершение и очистка
|
|
168
|
+
## 15. Завершение и очистка
|
|
251
169
|
```bash
|
|
252
170
|
# Опционально удалить установленный gem локально
|
|
253
171
|
gem uninstall keysloth -aIx
|
|
@@ -256,6 +174,7 @@ gem uninstall keysloth -aIx
|
|
|
256
174
|
rm -rf ~/tmp/keysloth-playground ~/tmp/keysloth-secrets-remote
|
|
257
175
|
```
|
|
258
176
|
|
|
177
|
+
|
|
259
178
|
## Чек-лист «что должно сработать»
|
|
260
179
|
- `gem build` и `gem install` проходят без ошибок; `keysloth version`/`help` работают.
|
|
261
180
|
- `push` создаёт `*.enc` в удалённом репозитории; `pull` восстанавливает исходные файлы.
|
metadata
CHANGED
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: keysloth
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- KeySloth Team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-09-
|
|
11
|
+
date: 2025-09-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 1.0.1
|
|
20
|
+
- - "<"
|
|
18
21
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
22
|
+
version: 1.4.0
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
|
-
- - "
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.0.1
|
|
30
|
+
- - "<"
|
|
25
31
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
32
|
+
version: 1.4.0
|
|
27
33
|
- !ruby/object:Gem::Dependency
|
|
28
34
|
name: rspec
|
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -113,7 +119,7 @@ description: "KeySloth - инструмент для безопасного хр
|
|
|
113
119
|
\nОбеспечивает простое получение, изменение и отправку секретов с использованием
|
|
114
120
|
\nAES-256-GCM шифрования.\n"
|
|
115
121
|
email:
|
|
116
|
-
-
|
|
122
|
+
- chausov@surf.dev
|
|
117
123
|
executables:
|
|
118
124
|
- keysloth
|
|
119
125
|
extensions: []
|
|
@@ -123,12 +129,17 @@ files:
|
|
|
123
129
|
- ".rspec"
|
|
124
130
|
- ".rubocop.yml"
|
|
125
131
|
- ".yardopts"
|
|
132
|
+
- Appraisals
|
|
126
133
|
- CHANGELOG.md
|
|
134
|
+
- LICENSE
|
|
127
135
|
- Makefile
|
|
128
136
|
- README.md
|
|
129
137
|
- Rakefile
|
|
130
138
|
- bin/keysloth
|
|
139
|
+
- gemfiles/thor_1.0.gemfile
|
|
140
|
+
- gemfiles/thor_1.3.gemfile
|
|
131
141
|
- keysloth.gemspec
|
|
142
|
+
- keysloth.png
|
|
132
143
|
- lib/keysloth.rb
|
|
133
144
|
- lib/keysloth/cli.rb
|
|
134
145
|
- lib/keysloth/config.rb
|
|
@@ -138,19 +149,25 @@ files:
|
|
|
138
149
|
- lib/keysloth/git_manager.rb
|
|
139
150
|
- lib/keysloth/logger.rb
|
|
140
151
|
- lib/keysloth/version.rb
|
|
141
|
-
-
|
|
142
|
-
- task
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
|
|
152
|
+
- promts/main/rules.md
|
|
153
|
+
- promts/main/task.md
|
|
154
|
+
- promts/outdated/feature_ragged_removing.md
|
|
155
|
+
- promts/outdated/feature_wildcard_extensions.md
|
|
156
|
+
- promts/outdated/fix_backups.md
|
|
157
|
+
- promts/outdated/fix_config_file.md
|
|
158
|
+
- promts/outdated/fix_ssh.md
|
|
159
|
+
- promts/outdated/plan.md
|
|
160
|
+
- promts/outdated/thor-updates.md
|
|
161
|
+
- promts/task_lists_for_human/release_task_list.md
|
|
162
|
+
- promts/task_lists_for_human/test_plan.md
|
|
163
|
+
homepage: https://github.com/chausovSurfStudio/keysloth
|
|
147
164
|
licenses:
|
|
148
165
|
- MIT
|
|
149
166
|
metadata:
|
|
150
167
|
allowed_push_host: https://rubygems.org
|
|
151
|
-
homepage_uri: https://github.com/
|
|
152
|
-
source_code_uri: https://github.com/
|
|
153
|
-
changelog_uri: https://github.com/
|
|
168
|
+
homepage_uri: https://github.com/chausovSurfStudio/keysloth
|
|
169
|
+
source_code_uri: https://github.com/chausovSurfStudio/keysloth
|
|
170
|
+
changelog_uri: https://github.com/chausovSurfStudio/keysloth/blob/main/CHANGELOG.md
|
|
154
171
|
rubygems_mfa_required: 'true'
|
|
155
172
|
post_install_message:
|
|
156
173
|
rdoc_options: []
|
data/task/cr.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Change Request: Поддержка SSH ключей id_ed25519 и улучшение UX
|
|
2
|
-
|
|
3
|
-
## Контекст проблемы
|
|
4
|
-
При запуске команды (например, `keysloth pull`) возникла ошибка:
|
|
5
|
-
|
|
6
|
-
```
|
|
7
|
-
Ошибка выполнения операции: SSH ключ не найден: /Users/<user>/.ssh/id_rsa
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
Причина: в `KeySloth::GitManager#create_ssh_credentials` по умолчанию ожидаются ключи формата RSA (`~/.ssh/id_rsa` и `~/.ssh/id_rsa.pub`). На машине пользователя используются ключи Ed25519 (`id_ed25519`, `id_ed25519.pub`).
|
|
11
|
-
|
|
12
|
-
## Временные решения (workarounds)
|
|
13
|
-
1. Использовать ключи из переменных окружения (подходит для локали и CI/CD):
|
|
14
|
-
```bash
|
|
15
|
-
export SSH_PRIVATE_KEY="$(cat ~/.ssh/id_ed25519)"
|
|
16
|
-
export SSH_PUBLIC_KEY="$(cat ~/.ssh/id_ed25519.pub)"
|
|
17
|
-
keysloth pull -r git@github.com:USER/REPO.git -p "PASSWORD"
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
2. Создать симлинки под ожидаемые имена (быстро, локально):
|
|
21
|
-
```bash
|
|
22
|
-
ln -s ~/.ssh/id_ed25519 ~/.ssh/id_rsa
|
|
23
|
-
ln -s ~/.ssh/id_ed25519.pub ~/.ssh/id_rsa.pub
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
3. Сгенерировать отдельный RSA‑ключ (если принципиально):
|
|
27
|
-
```bash
|
|
28
|
-
ssh-keygen -t rsa -b 4096 -C "you@example.com" -f ~/.ssh/id_rsa
|
|
29
|
-
# добавить ~/.ssh/id_rsa.pub в GitHub/GitLab
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Предложения по доработке
|
|
33
|
-
1. Поддержать Ed25519 «из коробки» в `create_ssh_credentials`:
|
|
34
|
-
- Приоритет: переменные окружения `SSH_PRIVATE_KEY`/`SSH_PUBLIC_KEY` (как сейчас).
|
|
35
|
-
- Fallback: искать пары ключей по стандартным путям в порядке:
|
|
36
|
-
- `~/.ssh/id_rsa(.pub)`
|
|
37
|
-
- `~/.ssh/id_ed25519(.pub)`
|
|
38
|
-
- Если пара найдена — использовать; иначе выбрасывать `AuthenticationError` с подсказками.
|
|
39
|
-
|
|
40
|
-
2. Добавить конфигурируемый путь к ключу:
|
|
41
|
-
- Env: `KEYSLOTH_SSH_KEY_PATH` (если задан — использовать `<path>` и `<path>.pub`).
|
|
42
|
-
- Опция CLI: `--ssh-key PATH` (пробрасывать в `GitManager`).
|
|
43
|
-
|
|
44
|
-
3. Рассмотреть поддержку ssh-agent:
|
|
45
|
-
- Использовать `Rugged::Credentials::SshKeyFromAgent` при отсутствии файлов и env.
|
|
46
|
-
|
|
47
|
-
4. Улучшить сообщение об ошибке:
|
|
48
|
-
- Печатать проверённые пути, быстрые шаги: env, симлинк, `--ssh-key`.
|
|
49
|
-
|
|
50
|
-
## Тестирование
|
|
51
|
-
- Добавить тесты в `spec/keysloth/git_manager_spec.rb`:
|
|
52
|
-
- только `id_rsa`
|
|
53
|
-
- только `id_ed25519`
|
|
54
|
-
- ключи через ENV
|
|
55
|
-
- путь через `KEYSLOTH_SSH_KEY_PATH`
|
|
56
|
-
- отсутствие ключей → `AuthenticationError`
|
|
57
|
-
|
|
58
|
-
## Документация
|
|
59
|
-
- Обновить README (раздел «Настройка SSH ключей») и `task/test_plan.md` (раздел про SSH) с примерами для Ed25519 и `--ssh-key`/env.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|