tm2027 · борд выбора

SSH по конфигу

Менеджер SSH-хостов, у которого один источник правды — ~/.ssh/config. Сегодня палитра Ctrl+Shift+P знает только хосты, вписанные руками в реестр деки (ssh-hosts.json), и один её глагол — «смотреть Herdr на этом хосте». Конфиг с 163 хостами она не видит. Девять секций ниже — девять решений; клик по карточке — выбор, строка кодов собирается внизу.

163хостов в config + Include
1ключ на всех · 139× root
0wildcard · Match · ProxyJump
~15семей по префиксу (bng-, service-, gads-…)
1

Источник правды

Где живёт список. PRODUCT.md уже говорит: «SSH-цель — это алиас и ничего больше; порт, ключ и jump-хост остаются в ~/.ssh/config», а реестр держит ровно одно своё знание — какие хосты пользователь смотрит.

1A
Конфиг — это список рекомендую
SSH HOSTS 163 · config
Type to search — name, user@host, family
oracle-devalexio@203.0.113.7HERDR
bng-02root@198.51.100.12
service-georoot@198.51.100.40
1ralexio@192.0.2.9ENV
shieldroot@203.0.113.88
terminal^⏎ watch herdr^E edit config
Палитра читает конфиг (с Include) и показывает все хосты. Реестр ssh-hosts.json становится оверлеем: только «смотрю/сплю» и консент. Ничего не копируется, дубликатов нет, правка конфига видна сразу.
+ одна правда, нулевой импорт · хост без записи в конфиге больше нельзя завести из деки (только через EDIT)
1B
Импорт, как из tm2026
SSH HOSTS 4 saved
Type to search SSH hosts - name or user@host
oracle-devalexio@203.0.113.7SAVED
1rENV
ADD SSH HOST
IMPORT ~/.ssh/config163 hosts
IMPORT TM20262 remaining
imported 163 hosts asleep · RE-IMPORT picks up changes
Строка IMPORT ~/.ssh/config копирует хосты в реестр (спящими), дальше они живут как SAVED. Изменения конфига — через RE-IMPORT, который обновляет только нетронутые записи.
+ ни одной новой сущности в коде палитры · две копии правды, дрейф, «а какой порт настоящий?»
1C
Две полки: CONFIG и SAVED
SSH HOSTS
Type to search
SAVED · 2
oracle-devalexio@203.0.113.7SAVED
1rENV
~/.SSH/CONFIG · 163
bng-02root@198.51.100.12SAVE
bng-03root@198.51.100.13
openTab save / sleep
Конфиг читается, но показывается отдельной полкой под сохранёнными. SAVE на строке конфига переносит хост наверх — копией с собственными port/identity.
+ привычные SAVED не тонут в 163 строках · та же двойная правда, что в 1B, только видимая
2

Форма списка на 163 хоста

DESIGN.md: «список такой длины — это поиск, а не скролл». Вопрос — что видно до первой буквы и как ходят стрелки.

2A
Плоский поиск, RECENT сверху рекомендую
SSH HOSTS 163
Type to search
RECENT
oracle-devalexio@203.0.113.72m
bng-07root@198.51.100.171h
service-kvroot@198.51.100.44yday
ALL · A–Z
1ralexio@192.0.2.9
accessroot@203.0.113.30
access1root@203.0.113.31
Пять последних — первыми, дальше алфавит. Поиск как в pane switcher: подпоследовательность + перевод раскладки (иштпbng), вес: алиас 3 · user@host 2 · семья 1.
+ один жест на всё, MRU закрывает 90% ходов · семьи из 15 хостов видны только через запрос
2B
Семьи по префиксу
SSH HOSTS 163 · 15 families
Type to search
baidu7
bng-15
bng-02root@198.51.100.12
bng-03root@198.51.100.13
bng-04root@198.51.100.14
gads-6
service-8
прочие24
Семья = общий префикс до дефиса/цифр (bng-, service-), выведенный из имён, без своей разметки. Стрелки ходят по семьям, раскрывает; запрос разворачивает всё в плоский список.
+ карта фермы видна без единой буквы · эвристика префикса ошибается (host.bga.ae, 1r), лишний уровень стрелок
2C
Фильтры слева, список справа
SSH HOSTS 163
Type to search
all163
recent5
watched2
root139
alexio11
bng-15
service-8
1ralexio@192.0.2.9
accessroot@203.0.113.30
access1root@203.0.113.31
agate-devubuntu@203.0.113.50
backofficeroot@203.0.113.60
baidu4000root@198.51.100.2
baidu4001root@198.51.100.3
Tab filters open
Палитра вырастает до 720px: слева фильтры по пользователю, семье, состоянию; справа список. Tab перескакивает между колонками.
+ срезы «все root» и «watched» одним кликом · палитра из лёгкой становится тяжёлой; это уже линза, а не поиск
3

Что несёт строка

Строка палитры — 12px Segoe в 560px. Алиас фиксирован; вопрос, что стоит рядом и что уступает первым.

3A
Алиас · user@host · бейджи рекомендую
oracle-devalexio@203.0.113.7HERDR
bng-02root@198.51.100.12
pgsqlroot@203.0.113.70:2222⇄ jump
1ralexio@192.0.2.9ENV
rapid1root@203.0.113.5UNMET
shieldroot@203.0.113.88
Дот = состояние Herdr, если хост смотрится (LIVE / stale / нет), пустой — просто хост из конфига. Тусклый user@host[:port], бейджи только когда есть что сказать: HERDR, ENV, ⇄ jump, UNMET (нет в known_hosts).
+ строка молчит, когда сказать нечего; правило Labelled State · не видно «когда я тут был»
3B
Оперативная строка: давность и состояние
oracle-devLIVE · 3 panes2m ago
bng-07no herdr1h ago
service-kvno herdryesterday
1rSTALE 40s3d ago
bng-02never
Вместо адреса — что дека знает: состояние Herdr и сколько панов, справа когда открывали. Адрес — по или в превью.
+ отвечает на «куда я ходил» · адрес скрыт, а именно его глаз ищет у bng-07 vs bng-08
3C
Голый алиас + карточка выбранного
bng-02
bng-03
bng-04
HostName198.51.100.13
Userroot
Port22 (default)
IdentityFile~/.ssh/2025
ProxyJump
known_hostsmet · ed25519 SHA256:k7Q…
fromconfig:412
Список — только имена, плотный. Под списком карточка выбранного: всё, что ssh -G разрешил, статус known_hosts и номер строки в конфиге.
+ полная правда о хосте до нажатия Enter · карточка съедает 7 строк списка; ssh -G на каждое движение стрелки
4

Что делает Enter

Сегодня Enter = «смотреть Herdr на хосте» (флот). Но 160 из 163 хостов конфига Herdr не несут — там нужен обычный терминал. Чей Enter?

4A
Enter — терминал, Ctrl+Enter — Herdr рекомендую
SPACES
main
  powershell · tm2027
  ssh bng-02
$ ssh.exe -tt bng-02
Welcome to Ubuntu 22.04.4 LTS
root@bng-02:~#
bng-02 · terminal on Local · ^⏎ would watch its Herdr instead
Enter открывает вкладку в текущем Space с ssh.exe -tt alias — Windows OpenSSH читает конфиг сам, ключи свои. Ctrl+Enter — нынешний флотовый глагол (WATCH). Футер палитры показывает оба.
+ частый-лёгкий путь на самой короткой клавише · меняет грамматику для тех 3 хостов, где сегодня Enter = Herdr
4B
Enter открывает глаголы хоста
BNG-02 root@198.51.100.12
Esc back to list
Enter не открывает ничего — он спрашивает: список глаголов на месте списка, как правое меню. Второй Enter — терминал. Условия решаются при открытии (MEET только для UNMET).
+ все глаголы находимы, ничего не надо помнить · два Enter на самый частый ход; «слой» поверх слоя
4C
Как сейчас: Enter — Herdr, Shift+Enter — терминал
SSH HOSTS
bng-0
bng-02root@198.51.100.12NO HERDR
bng-03root@198.51.100.13
Enter here would probe and offer INSTALL HERDR HERE · Shift+Enter opens a plain terminal
watch herdr⇧⏎ terminal
Грамматика не меняется: Enter — флот, Shift+Enter — терминал. На хосте без Herdr Enter уводит в пробу и предложение INSTALL.
+ ничего не ломается у нынешних SAVED · 160 из 163 хостов на Enter получают не то, что хотели
5

Много хостов одним ходом

Пятнадцать bng-NN — это ферма. Оператору нужно «зайти на все и посмотреть», иногда — набрать одно и то же на всех (Broadcast Ctrl+Shift+B уже есть).

5A
Отметить пробелом, открыть сплитами рекомендую
bng
bng-02root@198.51.100.12
bng-03root@198.51.100.13
bng-04root@198.51.100.14
bng-05root@198.51.100.15
bng-06root@198.51.100.16
Space mark open 3 as one tab^A mark all shown
Space отмечает, Enter открывает отмеченные одной вкладкой со сплитами (до 4 тайлов — предел сетки; больше — дополнительные вкладки). Вкладка называется bng ×3; строка статуса предлагает Broadcast.
+ ферма — одним жестом, без глобов · Space перестаёт быть символом запроса (алиасы без пробелов — приемлемо)
5B
Глоб в запросе + Ctrl+Enter
bng-02
root@bng-02:~# uptime
 13:04 up 41 days
bng-03
root@bng-03:~# uptime
 13:04 up 12 days
bng-04
root@bng-04:~# uptime
 13:04 up 41 days
bng-05
root@bng-05:~#
BROADCAST · 4 panes · Ctrl+Shift+B to stop
Запрос bng-0* — это уже фильтр; Ctrl+Enter открывает всё совпавшее. Больше четырёх — армированный вопрос в строке: OPEN 15 · SURE?. Broadcast включается сразу, если хостов больше одного.
+ ноль новых клавиш в списке · глоб конфликтует с fuzzy-поиском; случайный Ctrl+Enter на пустом запросе = 163 пана (спасает SURE?)
5C
По одному
bng-04
bng-04root@198.51.100.14
terminal
Палитра открывает один хост. Ферма собирается руками: Ctrl+Shift+P, имя, Enter — четыре раза. Сплиты — как обычно, из меню пана.
+ ничего не добавляется · тот самый ход, ради которого менеджер и нужен, остаётся ручным
6

Правка конфига

Сейчас ADD SSH HOST и Ctrl+E — форма, пишущая в реестр деки. Когда правда — конфиг, куда пишет форма? Ваш конфиг «Auto-generated from hosts.json» — его правит генератор.

6A
Дека конфиг не пишет: EDIT открывает файл рекомендую
SPACES
main
  ~/.ssh/config
 410 Host bng-02
 411 HostName 198.51.100.12
 412 User root
 413 IdentityFile ~/.ssh/2025
config reloaded · 163 hosts · 0 problems
Строка EDIT ~/.ssh/config (и Ctrl+E на хосте — с прыжком на его строку) открывает файл в пане: $EDITOR, иначе notepad. Дека читает и никогда не пишет — та же граница, что у known_hosts.
+ ни один генератор/скрипт не сломается, конфликтов записи нет · «быстро добавить хост» = руками в файле
6B
Форма дописывает блок Host в конфиг
ADD SSH HOST → ~/.ssh/config
Aliasbng-17
HostName198.51.100.27
Userroot
Port22
IdentityFile~/.ssh/2025
ProxyJump
appends a block marked # tm2027 · backup config.bak.<stamp> · edits only its own blocks
Форма остаётся, но пишет в конфиг: атомарно, с бэкапом, блоком с маркером # tm2027. Править и удалять дека берётся только свои блоки; чужие — read-only с EDIT в файл.
+ один вход для всех хостов · генератор из hosts.json перезапишет блоки деки; парсер-с-записью — самая рискованная часть
6C
Форма как сейчас — в реестр
ADD SSH HOST
Aliasbng-17
Port22
Identity fileC:\Users\…\.ssh\2025
saved to ssh-hosts.json · shown with SAVED beside config hosts
Ничего не меняется: форма пишет в реестр деки. Хост из формы стоит в списке рядом с хостами конфига с бейджем SAVED; если алиас есть и там и там — конфиг главнее.
+ нулевой риск для файла · у деки остаётся своя адресная книга, которую конфиг не видит (WSL ssh, скрипты)
7

Свежесть конфига

Файл меняется снаружи — генератором, редактором, NVIDIA Sync через Include. Когда дека перечитывает?

7A
При открытии палитры, по mtime рекомендую
SSH HOSTS 164 · reread 0.3ms
Type to search
bng-17root@198.51.100.27NEW
bng-02root@198.51.100.12
config · 2 files · changed 40s ago
Каждое открытие палитры сравнивает mtime конфига и всех Include; изменился — перечитать (163 хоста парсятся за доли миллисекунды). Новые с прошлого чтения — бейдж NEW на один показ.
+ ноль фоновой машинерии, всегда свежо там, где смотрят · флот (WATCH-хосты) узнаёт о смене порта только при следующем открытии
7B
Файловый вотчер
SERVERS
Local
oracle-dev
$
~/.ssh/config changed · 164 hosts · oracle-dev port 22 → 2222, reconnecting
ReadDirectoryChangesW на ~/.ssh и каталогах Include; смена — перечитать, строка статуса говорит что изменилось, WATCH-хост с новым портом переподключается сам.
+ флот и палитра всегда в одной правде · ещё один watcher-тред и его generation; редакторы пишут файл в 2–3 приёма
7C
RELOAD строкой
SSH HOSTS 163 · read 12m ago
rel
RELOAD ~/.ssh/configread at start
Конфиг читается на старте; строка RELOAD в палитре перечитывает по требованию. Честно и предсказуемо.
+ проще некуда · «добавил хост — а его нет» до тех пор, пока не вспомнишь про RELOAD
8

Где ещё видны хосты

Палитра — поиск. Но кнопка SSH в командной панели и пустой рейл тоже спрашивают «куда?».

8A
Только палитра рекомендую
SERVERS
Local
Ubuntu
oracle-dev
$
POWERSHELLWSLSSH ▾SETTINGS
SSH opens the host palette · ^⇧P
Кнопка SSH и пустой рейл открывают палитру, как сейчас. Хосты конфига нигде больше не перечисляются: «список такой длины — это поиск».
+ одна дверь, ничего не дублируется · недавние — на одно нажатие дальше, чем могли бы
8B
Секция HOSTS в рейле
SERVERS
Local
oracle-dev
HOSTS163
bng-07
service-kv
1r
all 163…
$
HOSTS lists recent five · click opens a terminal · right button asks
Свёрнутая секция HOSTS под серверами: пять недавних + «all 163…» в палитру. Клик — терминал, правая кнопка — WATCH / COPY ADDRESS.
+ недавние в один клик, мышью · рейл 292px уже несёт четыре линзы и кота; ещё одна секция — против fleet width rule
8C
Кнопка SSH → недавние выпадашкой
SERVERS
Local
oracle-dev2m
bng-071h
service-kvyday
ALL HOSTS…^⇧P
EDIT CONFIG
POWERSHELLWSLSSH ▾
Кнопка SSH становится как WSL: спрашивает «куда» списком недавних, последняя строка уводит в палитру. Тот же summoned-list, что у WSL-дистрибутивов.
+ симметрия с кнопкой WSL, недавние в два клика · ещё одна плавающая поверхность у той же кнопки
9

Под капотом: как алиас конфига доезжает до WSL-ssh

Терминал (Enter) идёт через Windows OpenSSH — он читает конфиг сам. Но WATCH (Herdr) едет через WSL-ssh ради мультиплекса, а WSL-ssh Windows-конфиг не видит. Кто переводит?

9A
Дека разрешает через ssh -G и передаёт явно рекомендую
ssh.exe -G bng-02 (Windows, читает config + Include)
↓ hostname · user · port · proxyjump
wsl.exe -e bash -c "exec ssh -o HostName=198.51.100.12 -o User=root -o Port=22 -o ProxyJump=none -o ControlMaster=auto … -T bng-02"
↓ ключ — из агента (как сейчас); IdentityFile с Windows-путём отброшен (как сейчас)
один мастер-канал · 10ms на вызов
Существующий scan_endpoint уже делает ssh -G. Расширить до user/proxyjump и передать WSL-ssh явными -o. Конфиг остаётся правдой, дека — переводчиком; парсер файла нужен только для списка, не для соединения.
+ ничего не дублируется, ProxyJump работает · один ssh -G (~40ms) на WATCH, кэшировать по mtime
9B
-F /mnt/c/…/.ssh/config для WSL-ssh
wsl.exe -e bash -c "exec ssh -F /mnt/c/Users/…/.ssh/config -T bng-02"
Include "C:\Users\…\ssh_config" — не найден, молча пропущен
IdentityFile C:\Users\…\.ssh\2025 — «no such identity», warning в каждый вызов
~/.ssh/2025 → $HOME WSL, не Windows
↓ ключ — из агента, если он поднят
работает, шумно
Просто отдать WSL-ssh Windows-конфиг через -F. Пути внутри — Windows-овские, WSL их не понимает: Include теряется, IdentityFile ругается.
+ ноль кода разрешения · тихие потери Include, предупреждения в каждом вызове, ~ значит другой дом
9C
Хосты конфига — только через Windows OpenSSH
ssh.exe -T bng-02 (каждый вызов — свой handshake)
↓ poll · rename · tab create · attach — каждый ~700ms
712ms door to door · без мультиплекса
SAVED-хосты едут через WSL как сейчас, config-хосты — медленно, зато без перевода
Хосты из конфига под WATCH идут по старому пути Windows OpenSSH — он всё понимает сам. Мультиплекс только для хостов реестра.
+ нет ни парсера, ни перевода · два класса хостов с разной скоростью; 700ms на каждый poll — то, от чего ушли
ВЫБОР