# Консоль SSH (1.24)

Окно с терминалом и боковой панелью: сохранённые пароли вводятся в консоль
одним щелчком (или сами, когда появляется запрос), часто используемые команды
вызываются из списка, помощник ИИ предлагает команды и может вводить их сам.

На Windows консоль — часть клиента (`RdpFidoClient.exe console …`, отдельного
файла нет: она приходит с установщиком и с обновлением), на Linux —
`rdpfido-console` из пакета клиента (`/usr/lib/rdpfido`).
Клиент запускает её после подтверждения ключом; порт SSH на машине должен быть
за шлюзом (`rdpfido-gate ports add 22`, см. [руководство для Linux](linux/README.ru.md)) либо сессия
должна быть без шлюза.

| Откуда | Как |
|---|---|
| Клиент Windows | плитка с протоколом «Консоль SSH» (выбирается в свойствах сессии) открывает консоль по щелчку; для любой другой плитки — правый щелчок → «Консоль SSH…» |
| Клиент Linux | `rdpfido console СЕССИЯ [--user ИМЯ] [-- аргументы ssh]` |
| Без сессии | `RdpFidoClient.exe console --host АДРЕС [--user ИМЯ] [--port N]`; Linux: `/usr/lib/rdpfido/rdpfido-console --host …` |
| Попробовать без сервера | `RdpFidoClient.exe console` (Linux: `rdpfido-console`) без аргументов — консоль локальной оболочки |

Имя пользователя берётся из сессии, если оно не в виде `ДОМЕН\имя`.

В клиенте Windows плитки с протоколом «Консоль SSH» собраны на вкладке «SSH»
(клавиша Tab переключает её с вкладкой рабочих столов). Плитки там компактные;
свою картинку плитке задаёт правый щелчок → «Картинка плитки…».

## Вход по ключу, порт и параметры ssh

Консоль запускает системный `ssh`, поэтому ключи по умолчанию, `ssh-agent` и
`~/.ssh/config` работают без настроек. Остальное задаётся в сессии:

- **Клиент Windows** — в свойствах сессии с протоколом «Консоль SSH» группа
  «Консоль SSH»: «Порт SSH», «Файл ключа» (кнопка «Обзор…» открывает `~\.ssh`),
  «Параметры ssh» — передаются как есть, например
  `-L 8006:127.0.0.1:8006 -J jump-host`.
- **Клиент Linux** — `rdpfido add|edit СЕССИЯ --ssh-port N --ssh-key ФАЙЛ
  --ssh-opt АРГ…` (каждый `--ssh-opt` — один аргумент; `--ssh-opt none`
  очищает список). Настройки действуют и на `rdpfido ssh`, и на
  `rdpfido console`; то, что идёт после `--`, добавляется к ним.

Запрос парольной фразы ключа (`Enter passphrase for key…`) распознаётся как
запрос пароля: её можно держать записью во вкладке «Пароли».

## Панель

Вкладки переключаются кнопками вверху или Ctrl+Shift+1/2/3; Ctrl+Shift+B
прячет панель; Esc возвращает ввод в терминал. Копирование — Ctrl+Shift+C,
вставка — Ctrl+Shift+V или Shift+Insert.

**Пароли.** Запись: название, имя пользователя, пароль, «на какой запрос
отвечает» (часть строки, например `[sudo] password`) и два флажка — «вводить
самому, когда появится этот запрос» и «только для этой сессии». Щелчок по
записи вводит пароль и Enter; кнопки справа — «без Enter», «логин», «изм.».
Когда терминал печатает запрос пароля, в углу появляется плашка с подходящими
записями. Запись с флажком «вводить самому» отвечает на свой запрос сразу, но
не чаще раза в 15 секунд: неверный пароль не будет введён трижды подряд.

**Команды.** Запись: название, команда (можно несколько строк), «нажимать
Enter после ввода», «только для этой сессии». Щелчок выполняет команду,
«Вставить» — вводит без Enter.

Записи «только для этой сессии» видны лишь в консоли своей сессии и стоят в
списке первыми; остальные общие для всех.

**Помощник.** Под шестерёнкой — сервис, адрес, модель и ключ:

- Claude (API Anthropic): адрес `https://api.anthropic.com`, модель
  `claude-opus-5-5`, ключ API;
- любой сервер, совместимый с OpenAI: LM Studio (`http://адрес:1234/v1`),
  Ollama (`http://адрес:11434/v1`), свой шлюз; ключ необязателен.

После ввода адреса (для Claude — и ключа) под полем «Модель» появляется список
моделей, которые есть на сервере: выберите из него или введите название
вручную — не всякий сервер сообщает свои модели. Адрес, набранный без `/v1`,
исправляется сам. (С версии 1.24.1; в пакетах для Linux — со следующей их
сборки, до того модель вводится вручную.)

Каждая предложенная команда показывается блоком с кнопками «Вставить»,
«Выполнить», «+ В команды». Переключатель «Предложенные команды»: только по
щелчку (по умолчанию), вставлять первую в консоль, выполнять первую сразу.

Вверху вкладки три вида: «Чат», «Промпты», «История».

- **Промпты** — постоянные заметки для помощника: описание системы, версия
  Ubuntu, что нельзя трогать. Промпт хранится для своей сессии (или для всех,
  если снять «только для этой сессии»). Пока флажок у промпта установлен, он
  уходит модели с каждым запросом; состояние флажка сохраняется.
- **История** — разговоры этой сессии. Разговор сохраняется после каждого
  ответа; его можно открыть и продолжить, удалить или начать новый. При
  открытии старого разговора команды в консоль не вводятся, даже в режиме
  «выполнять первую».

Под шестерёнкой, кроме сервиса и ключа, — «Ждать ответа, секунд» (от 10 до
3600, по умолчанию 600): локальная модель может отвечать минутами.

Флажок «Видит консоль» — разрешение: пока он снят, помощник не получает текст
терминала; когда установлен, с каждым вопросом уходят последние 200 строк
экрана. Запрет проверяет сама программа, а не страница.

## Где что хранится

Разговоры с помощником — в `console-chats.json` рядом (до 100 на сессию).

`console.json` в каталоге данных клиента (`%LOCALAPPDATA%\RdpFidoClient`,
`~/.config/rdpfido`): записи, команды, настройки помощника. Пароли и ключ API
в нём не лежат в открытом виде: на Windows они зашифрованы DPAPI текущего
пользователя, на Linux хранятся в связке ключей рабочего стола (Secret
Service). Без связки ключей на Linux пароли не сохраняются.

Страница панели пароли не получает вовсе: она называет запись, программа сама
вводит её в терминал. Введённый пароль терминал не печатает, поэтому в текст,
который видит помощник, он не попадает.

## Как устроено

Программа запускает `ssh` в псевдотерминале (ConPTY / forkpty) и показывает
страницу — терминал xterm.js и панель — в своём окне: WebView2 на Windows,
браузер семейства Chromium в режиме приложения на Linux (если его нет —
вкладка браузера по умолчанию). Страница общается с программой по HTTP на
`127.0.0.1` со случайным портом; каждый запрос несёт одноразовый для запуска
токен, обращения с чужим заголовком `Host` отклоняются. Запросы к модели
делает `curl`; ключ передаётся ему через stdin.

## Чего пока нет

- В клиенте для Linux нет ни плитки, ни кнопки (только команда `rdpfido console`).
- Шлюз на Windows не закрывает дополнительные порты.
- Передача файлов, вкладки, несколько терминалов в одном окне.
