sshkeeper v0.8.5: SSH-вкладки, выделение текста и работа над ошибками

sshkeeper — менеджер SSH-подключений, маршрутов, секретов и туннелей

В конце сентября я писал про sshkeeper 0.7.0. Тогда главными изменениями были новый интерфейс, постоянные сессии через tmux и зашифрованная синхронизация между компьютерами. С тех пор вышло ещё несколько версий, и в 0.8.5 работа с SSH выглядит уже заметно иначе.

Самое существенное изменение — SSH-подключения больше не вытесняют интерфейс sshkeeper. Теперь можно держать несколько подключений в отдельных вкладках, переходить к списку серверов, запускать туннели и возвращаться к работающей сессии. А заодно пришлось доводить встроенный терминал до состояния, когда обычные вещи — прокрутка и копирование текста — ведут себя привычно.

Интерфейс sshkeeper: список профилей SSH-серверов

Что происходило после 0.7.0

0.7.1–0.7.6: синхронизация и Windows

В 0.7.0 появилась синхронизация профилей, секретов и ключей через зашифрованный файл. Дальше довольно быстро выяснилось, что у неё есть несколько неудобных сценариев.

Например, если Linux и Windows установлены на одном компьютере, одновременно запустить обе системы нельзя. В 0.7.1 появился вариант отложенного подключения устройства: одноразовый код SKP1-… действует 24 часа. Его можно создать в первой системе, перезагрузиться и завершить подключение во второй. Обычный шестизначный код на 10 минут никуда не делся.

В 0.7.2–0.7.6 исправлялась другая проблема: у Linux и Windows разные домашние каталоги и пути к SSH-ключам. Если синхронизировать /home/user/.ssh/id_ed25519 на Windows, такой путь там бесполезен. Теперь ключи под .ssh имеют переносимое представление в синхронизированном наборе, а на принимающей машине разворачиваются в её домашнем каталоге. Исправлены в том числе уже синхронизированные старые профили, когда общий файл не менялся, а локальный путь оставался неправильным.

Там же приводилась в порядок работа Windows-клиента: запуск из Проводника, авторизация по паролю и passphrase через ConPTY, фоновые туннели и проверка состояния SSH-процессов.

0.8.0: SSH внутри самого sshkeeper

Раньше обычное подключение передавало терминал запущенному ssh, а после завершения возвращало пользователя в менеджер. Теперь команда «Подключиться» открывает встроенную SSH-вкладку. Можно оставить её работать, открыть вторую, уйти к списку серверов и вернуться обратно.

При этом sshkeeper по-прежнему использует системный OpenSSH, а не реализует собственный SSH-протокол. Терминальный вывод обрабатывается эмулятором x/vt: под Linux/macOS используется PTY, под Windows — ConPTY.

  • Alt+0 — вернуться к списку серверов; Alt+1…9 — перейти к нужной SSH-вкладке.
  • Alt+←/→ — переключать вкладки; Alt+W — закрыть текущую.
  • «Туннель + подключение» запускает фоновый port forwarding отдельно от интерактивной SSH-сессии: одно можно закрыть, не отключая другое.
  • Мышью можно выбирать серверы, пользоваться действиями в правой панели и переключаться между вкладками.

Здесь важно различать два режима. Встроенные вкладки работают без tmux, но живут вместе с процессом sshkeeper. Прежние постоянные сессии на базе tmux остались как отдельная необязательная возможность: они нужны, когда SSH-соединение должно пережить закрытие самого менеджера.

0.8.1–0.8.3: мышь, нагрузка, история вывода и курсор

В 0.8.1 исправлена обработка кликов по списку серверов: из-за неправильного учёта заголовка можно было нажать на одну строку, а выбрать соседнюю. Для переключения вкладок на Windows добавлена комбинация Alt+←/→, поскольку не каждый терминал правильно передаёт Ctrl+PgUp/PgDn.

В 0.8.2 убрали постоянную перерисовку интерфейса каждые 50 мс. Теперь обновление происходит при реальном выводе данных из SSH-сессии или её завершении. Пустая, ничего не делающая вкладка не должна понапрасну нагружать процессор.

В 0.8.3 появилась нормальная история терминального вывода — scrollback. Можно листать длинный вывод колесом мыши или через PgUp/PgDn; при вводе управление возвращается к текущему экрану. Добавили отображение настоящего положения курсора, что важно для nano, vim и других полноэкранных программ.

0.8.4–0.8.5: выделить, скопировать, выйти

Здесь обнаружилась мелочь, которая в повседневной работе совсем не мелочь. Открываешь SSH-вкладку, видишь нужный кусок конфигурации или лога — и не можешь выделить его мышью обычным способом. С зажатым Shift терминал выделял текст, но постоянно держать в голове эту особенность неудобно.

В 0.8.4 появилось выделение внутри самого SSH-терминала без Shift с копированием в системный буфер обмена. Там же изменено поведение завершённых сессий: после успешного exit вкладка закрывается автоматически; при ошибке подключения или ненулевом коде выхода она остаётся открытой, чтобы можно было прочитать вывод.

После первых проверок выяснилось, что выделение ещё не полностью похоже на обычный терминал. Можно было копировать лишь видимый текст, а прокрутка колесом сбрасывала выбранный фрагмент. Поэтому в 0.8.5 добавлены:

  • Автопрокрутка при выделении: держишь левую кнопку и тянешь выше или ниже области SSH-вывода — история прокручивается, выделение продолжается.
  • Прокрутка без потери выделения: колесо мыши позволяет просматривать историю, не сбрасывая подсвеченный текст.
  • Двойной щелчок: выделение слова, включая кириллицу, цифры и подчёркивания; протягивание расширяет выделение по словам.
  • Тройной щелчок: выделение строки; протягивание расширяет его целыми строками.
  • Обычное копирование: после отпускания кнопки выделенный текст отправляется в системный буфер.

Заодно добавлены тесты на многострочный вывод, Unicode, историю терминала, двойные и тройные клики и завершение SSH-процесса. Исправлялся и платформенный нюанс: на Windows два быстрых щелчка могут получить одну и ту же временную метку. Это тоже учтено.

Установка 0.8.5

Готовые сборки есть для Linux amd64/arm64, macOS amd64/arm64 и Windows amd64. Для Linux выпускаются .deb, .rpm и архивы; Windows-сборка пока считается экспериментальной.

Для Debian/Ubuntu (после скачивания DEB-файла):

sudo apt install ./sshkeeper_0.8.5-1_amd64.deb

Для Fedora/RHEL-family:

sudo dnf install ./sshkeeper-0.8.5-1.x86_64.rpm

Если sshkeeper раньше устанавливался вручную в ~/.local/bin, стоит проверить, какой исполняемый файл запускается. Старая локальная копия может оказаться в PATH раньше пакетной:

sshkeeper --version
type -a sshkeeper

Скачать sshkeeper v0.8.5 на GitHub · Страница проекта · Руководство · Исходники (MIT)

В остальном концепция не изменилась: sshkeeper хранит SSH-профили, маршруты, ключи, туннели и секреты, а подключает к серверам обычный OpenSSH. Просто теперь для типичной работы с несколькими серверами не приходится постоянно выходить из одного интерфейса и возвращаться в другой.

Оставить комментарий

Email не публикуется. Поля, отмеченные *, обязательны.