⚙⚙⚙

// ДОБАВЛЕНИЕ ХОСТА

Нажмите кнопку + на экране хостов, чтобы добавить новый сервер (на iOS она открывает короткое меню: выберите Добавить хост).

Обязательные поля

  • Имя хоста / IP — адрес сервера или IP. Поддерживаются как IPv4, так и IPv6.
  • Порт — по умолчанию 22. Измените его, если на вашем сервере SSH работает на другом порту.
  • Имя пользователя — Unix-пользователь, под которым вы хотите входить (например, ubuntu, root, deploy).
  • Аутентификация — выберите пароль или SSH-ключ (рекомендуется).

Проверка отпечатка хоста

При первом подключении SSHBorg показывает отпечаток сервера и просит вас его принять. Это проверка безопасности: она гарантирует, что вы подключаетесь к нужной машине, а не к самозванцу. Прежде чем принимать, убедитесь, что отпечаток совпадает с тем, который сообщил администратор сервера или который вы получили по доверенному каналу.

После принятия отпечаток сохраняется локально. Если при следующем подключении он изменится, SSHBorg вас предупредит — это может означать переустановку сервера, смену ключей или атаку «человек посередине».

// СОВЕТ
Проверить отпечаток сервера можно в любой момент командой:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

// ГРУППЫ ХОСТОВ

Когда список серверов разрастается, хосты можно объединять в сворачиваемые группы с цветовой маркировкой — например Продакшн, Домашняя лаборатория, Клиенты.

Создание группы

  1. Добавьте или отредактируйте хост и откройте выпадающий список Группа.
  2. Выберите Новая группа…, введите название и выберите один из предустановленных цветов.
  3. Сохраните хост — теперь список хостов показывает группу как отдельный раздел.

На iOS группу можно создать и отдельно — кнопкой + → Новая группа.

Работа с группами

  • Свернуть / развернуть — нажмите на заголовок группы, чтобы свернуть или снова открыть её. Состояние запоминается даже после перезапуска приложения.
  • Цвет — цвет группы отображается точкой в заголовке и оттенком значков хостов внутри группы.
  • Изменить — нажмите и удерживайте заголовок группы, затем выберите Изменить, чтобы переименовать группу или сменить её цвет.
  • Удалить — нажмите и удерживайте заголовок, затем выберите Удалить. Хосты в группе не удаляются — они просто перестают быть сгруппированными.

Цвета можно выбрать из быстрых образцов или, на Android, свободно подобрать с помощью градиентного выбора цвета — на iOS выбор делается из образцов. У хоста может быть и собственный цвет — он задаётся в редакторе хоста, сразу под группой, — который перекрывает цвет группы и работает также для хостов без группы.

Хосты без группы остаются вверху списка, и если вы никогда не создадите ни одной группы, список будет выглядеть и работать точно так же, как раньше.

Порядок списка

Выберите, как упорядочен список, в Настройки → Порядок списка хостов:

  • По алфавиту (по умолчанию) — группы по имени, хосты по метке внутри каждой.
  • Недавние — сверху хост, к которому вы подключались последним; никогда не использованные остаются внизу.
  • Часто используемые — сначала хосты с наибольшим числом подключений.
  • Вручную — порядок, который задаёте вы.

В первых трёх режимах группы остаются по алфавиту, поэтому заголовки разделов никогда не перемещаются и меняется только расположение хостов внутри них. В ручном порядке группы тоже можно двигать.

Чтобы изменить порядок, выберите Вручную, затем откройте меню хоста или заголовка группы — кнопка ⋮ (… на iOS), долгое нажатие или клавиша Menu на пульте Android TV — и используйте Переместить вверх / Переместить вниз. Хост перемещается только внутри своего раздела: чтобы перенести его в другую группу, измените группу в редакторе хоста. При переходе в ручной режим сохраняется именно тот порядок, что был на экране, поэтому ничего не сдвигается, а добавленные позже хосты попадают в конец своего раздела.

// ФАЙЛОВЫЙ МЕНЕДЖЕР SFTP

Файловый менеджер SFTP позволяет просматривать, отправлять, скачивать, переименовывать и удалять файлы на сервере прямо с телефона. Откройте его с экрана хостов пунктом Файлы в меню хоста.

Навигация

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

Символические ссылки отмечены маленьким значком ссылки. Нажатие на симлинк переводит к его цели: если он указывает на каталог, вы входите в него, если на файл — он ведёт себя как обычный файл.

Отправка файлов

Нажмите кнопку отправки (↑), чтобы выбрать один или несколько файлов из памяти телефона. Передача начинается сразу, а прогресс отображается вверху экрана.

Скачивание файлов и папок

Нажмите значок скачивания справа в строке файла, чтобы сразу его скачать. Чтобы скачать папку целиком, нажмите значок скачивания рядом с ней — SSHBorg загрузит всё дерево каталогов и сохранит его в папке Downloads на вашем телефоне.

Если файл уже существует в месте назначения, диалог спросит, нужно ли перезаписать, пропустить файл или отменить всю передачу.

// ПРИМЕЧАНИЕ О СИМЛИНКАХ
При скачивании папки символические ссылки, указывающие на каталоги, пропускаются — загружаются только обычные файлы (включая симлинки на файлы). Это предотвращает непреднамеренную рекурсивную загрузку.

Множественный выбор и групповые операции

Нажмите Выбрать элементы на панели инструментов, чтобы войти в режим выбора, и отметьте нужные элементы. Панель инструментов показывает действия для текущего выбора:

  • Скачать — скачивает все выбранные файлы и папки сразу, с диалогом прогресса и возможностью отмены.
  • Удалить — удаляет все выбранные элементы. Удаление непустой папки рекурсивно уничтожает всё её содержимое. Отмены нет.

Перемещение файлов на сервере

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

Если в назначении это имя уже занято, SSHBorg спросит, прежде чем что-то менять. Файл можно заменить или оставить рядом с существующим; две папки с одинаковым именем могут только стоять рядом, потому что ни один SFTP-сервер не умеет объединять папки — mv тоже отказывается. Перемещение между двумя разными дисками сервера тоже невозможно: перемещение — это переименование, а переименование не пересекает файловые системы. Для этого нужна копия, которую SSHBorg пока не делает.

Правка файлов

Нажмите на файл, чтобы открыть его меню, и выберите Открыть в редакторе, чтобы изменить его прямо на сервере. На телефоне ничего не остаётся: файл читается в память, правится и записывается обратно.

Файл возвращается таким, каким пришёл. Кодировка определяется и используется снова при сохранении, переводы строк LF или CRLF сохраняются, файл без перевода строки в конце таким и остаётся, права не меняются. Если кодировка определена неверно, коснитесь её в строке внизу редактора и выберите другую — в списке только те кодировки, которые способны точно воспроизвести байты этого файла, поэтому неверный выбор может выглядеть неправильно, но испортить файл не может.

При сохранении рядом с оригиналом пишется временный файл, который затем переименовывается на его место: оборвавшаяся связь не оставит на сервере наполовину записанный файл.

Файлы открываются до 4 МБ, какой бы ни была их длина: рисуются только строки на экране, поэтому файл в мегабайты прокручивается как короткий. Всё, что больше, — это терминал с nano или vi, у которого ограничений нет вовсе.

Файлы настроек подсвечиваются — комментарии, строки, числа, ключи, заголовки разделов, переменные shell и теги XML — по имени файла или, если имя ничего не говорит, по форме содержимого: сценарии shell, директивы в стиле nginx и sshd, INI, YAML, JSON и XML. Обычный текст, заметки и журналы намеренно остаются без цвета, где он был бы лишь шумом. Подсветка — это только вид, она не меняет ни одного байта.

Шестнадцатеричный редактор

Нетекстовый файл открывается в шестнадцатеричном редакторе: смещения слева, байты в середине, печатные символы справа и клавиатура для шестнадцатеричных цифр. Коснитесь байта и наберите две цифры, чтобы заменить его. Значения меняются, длина — никогда, поэтому каждое смещение в файле остаётся на месте. Открыть в HEX в меню файла открывает так любой файл, а текстовый файл, принятый за двоичный — например, со случайным байтом NUL, — всё равно можно открыть как текст в том же окне.

// iOS
  • Отправка — откройте меню Действия (⋯) и выберите Загрузить…; файлы выбираются в системном браузере «Файлы».
  • Куда попадают загрузки — в собственную папку SSHBorg, которую приложение «Файлы» показывает в На iPhone → SSHBorg (На iPad на iPad). Скачивание никогда ничего не перезаписывает: если имя занято, новый файл получает пронумерованное имя.
  • Папки — нажмите и удерживайте файл или папку, чтобы открыть меню: Скачать, Переименовать, Удалить.
  • Множественный выбор — выберите Выбрать элементы в меню «Действия», затем отметьте элементы. Долгое нажатие вместо этого открывает меню элемента.
  • Конфликты при отправке — диалог предлагает Заменить, Оставить оба (отправленный файл получает новое имя) или Отмена.
  • Правка — редактор и шестнадцатеричный редактор есть и здесь: меню файла (долгое нажатие) предлагает Открыть в редакторе и Открыть в HEX. Пока файл загружается, он проходит через временную папку приложения и удаляется сразу после чтения.
  • Сохранение — файл пишется прямо поверх оригинала, а не во временный файл рядом, который затем переименовывается на его место, поэтому связь, потерянная посреди сохранения, может оставить его записанным наполовину.

// SSH-КЛЮЧИ

Аутентификация по ключу безопаснее паролей и после настройки не требует ничего запоминать или вводить.

Создание ключа

Нажмите значок ключа вверху экрана хостов, чтобы открыть SSH-ключи, и создайте новый ключ. SSHBorg поддерживает:

  • Ed25519 — рекомендуется. Быстрый, компактный и безопасный.
  • ECDSA (P-256 / P-384) — хорошая совместимость со старыми серверами.
  • RSA (2048 / 4096 бит) — максимальная совместимость, но медленнее.

Дайте ключу осмысленное имя (например, my-vps или work-server), чтобы потом его узнать.

// ЗАМЕЧАНИЕ О БЕЗОПАСНОСТИ
SSHBorg намеренно не позволяет экспортировать закрытые ключи. Ключ никогда не покидает устройство. Если вам нужен такой же доступ с другого устройства, создайте на нём новый ключ и авторизуйте его на серверах отдельно — так безопаснее.

Авторизация ключа на сервере

После создания ключа нажмите на него, чтобы увидеть открытый ключ. Скопируйте его и вставьте в файл ~/.ssh/authorized_keys на сервере для того пользователя, под которым вы хотите входить.

  1. На телефоне откройте SSHBorg → SSH-ключи (значок ключа на экране хостов) → нажмите на ключ → скопируйте открытый ключ.
  2. Войдите на сервер (по паролю или другим ключом, который у вас уже есть).
  3. Добавьте открытый ключ в файл авторизованных ключей:
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    echo "ssh-ed25519 AAAA...вашскопированныйключ..." >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
  4. Попробуйте подключиться через SSHBorg — вход должен пройти без запроса пароля.
// ТРЕБОВАНИЕ К СЕРВЕРУ
Убедитесь, что на сервере в /etc/ssh/sshd_config указано PubkeyAuthentication yes. В большинстве дистрибутивов это значение по умолчанию, но некоторые усиленные образы его отключают.

Шифрование сохранённых ключей и паролей

Включите Настройки → Безопасность → Шифровать чувствительные данные, чтобы хранить закрытые ключи и сохранённые пароли хостов зашифрованными ключом, который находится в защищённом оборудовании устройства — в Android Keystore или, на iOS, в Связке ключей. Опция выключена, пока вы её не включите; совет по безопасности при первом запуске указывает на неё.

Зашифрованные данные привязаны к устройству и к этой установке приложения: после удаления сохранённые ключи восстановить нельзя, и придётся создать новые и заново авторизовать их на серверах. Вместе с блокировкой приложения это настоятельно рекомендуется, если вы храните на телефоне доступы к важным серверам.

Ключ, защищённый паролем, запрашивает его один раз — при импорте, а затем хранится уже открытым: сам пароль на устройство не записывается. Пароль обычно используют и где-то ещё, тогда как приватный ключ значим только сам по себе — а ключ, лежащий рядом со своим паролем, им всё равно не защищён. Здесь его защищают приватное хранилище приложения, Шифровать чувствительные данные и блокировка приложения. Ключ, импортированный прежней версией, остался зашифрованным и не может пройти проверку: в списке такие отмечены, их нужно импортировать заново.

Два зашифрованных формата, которые приложение не открывает: контейнер OpenSSL (BEGIN ENCRYPTED PRIVATE KEY) и .ppk от PuTTY. Импорт об этом сообщает, а не берёт ключ наполовину. Расшифруйте его тем инструментом, которым он создан, и импортируйте заново — на копии, а не на единственном своём файле:

ssh-keygen -p -N "" -f id_ed25519_copy
openssl pkcs8 -in key.pem -out key_plain.pem

PuTTYgen преобразует .ppk через Conversions → Export OpenSSH key.

// iOS
На iOS всё так же: пароль запрашивают один раз, при импорте, ключ хранится открытым, а пароль нигде не записывается. Один формат iOS отклоняет дополнительно: помимо контейнера OpenSSL и .ppk от PuTTY, ещё и старое шифрование PEM (Proc-Type: 4,ENCRYPTED), которое пишет ssh-keygen -m PEM с паролем. Расшифруйте такой ключ и импортируйте заново.

// ПОДСКАЗКИ КОМАНД

Пока вы печатаете в терминале, SSHBorg показывает панель подсказок над клавиатурой. Подсказки берутся из истории команд того пользователя, под которым вы подключились.

Как это работает

При открытии сессии терминала SSHBorg читает файл истории оболочки с удалённого сервера. Он пробует следующие расположения по порядку:

  1. ~/.bash_history — по умолчанию для Bash
  2. ~/.zsh_history — по умолчанию для Zsh (также проверяется $HISTFILE, если задан)
  3. ~/.local/share/fish/fish_history — для пользователей Fish

Используется первый существующий и доступный для чтения файл. По мере ввода команды фильтруются в реальном времени и показываются чипами на панели подсказок. Нажмите на чип, чтобы вставить команду.

Решение проблем

Подсказки не появляются

  • Файл истории может ещё не существовать (первый вход или оболочка не настроена на сохранение истории).
  • Убедитесь, что ваша оболочка настроена на запись истории. Для Bash добавьте в ~/.bashrc:
    HISTFILE=~/.bash_history
    HISTSIZE=10000
    HISTFILESIZE=20000
  • Для Zsh добавьте в ~/.zshrc:
    HISTFILE=~/.zsh_history
    HISTSIZE=10000
    SAVEHIST=10000
    setopt APPEND_HISTORY SHARE_HISTORY

Подсказки от другого пользователя

// ИЗВЕСТНОЕ ОГРАНИЧЕНИЕ
Если вы подключились одним пользователем, а затем выполнили sudo su - root (или переключились на другого пользователя через su), панель подсказок по-прежнему показывает историю исходного пользователя входа, а не root. Это потому, что SSHBorg читает файл истории до запуска оболочки, используя те учётные данные, с которыми вы подключились.

Чтобы получать подсказки из истории root, добавьте в SSHBorg отдельный хост, настроенный на прямой вход под root (если ваш сервер это допускает).

// ЖЕСТЫ В ТЕРМИНАЛЕ

Помимо ввода текста терминал реагирует на несколько сенсорных жестов:

  • Прокрутка истории — проведите вверх или вниз, чтобы просмотреть буфер прокрутки терминала.
  • Масштаб — сведите или разведите пальцы, чтобы уменьшить или увеличить размер текста.
  • Копирование текста — нажмите и удерживайте в любом месте терминала, чтобы войти в режим выделения. Перетаскивайте маркеры, чтобы изменить выделенную область, затем нажмите Копировать выделение, чтобы скопировать только выделенный текст, или Копировать всё, чтобы скопировать весь вывод. Нажмите в любом другом месте для отмены. На iOS долгое нажатие выделяет слово под пальцем и открывает системное меню с пунктами Скопировать, Вставить и Выбрать все; потяните за край выделения, чтобы расширить его.
  • Вставка — используйте кнопку Вставить на панели дополнительных клавиш (она видна, когда открыта клавиатура).

Полноэкранные программы. Программы, занимающие весь экран — tmux, vim, nano, less — не имеют собственной истории, поэтому пока они работают, вид остаётся на активном экране и не соскальзывает в вывод оболочки под ним.

Прокрутку внутри них должна обеспечивать сама программа. В tmux добавьте set -g mouse on в ~/.tmux.conf: тогда свайп листает историю панели под вашим пальцем. То же относится к любой программе, принимающей ввод мышью, например к vim с set mouse=a. Для screen проверьте, есть ли altscreen on в ~/.screenrc — во многих системах он по умолчанию выключен, и screen тогда рисует поверх обычной истории.

// НАСТРОЙКИ ТЕРМИНАЛА

В разделе Настройки → Терминал можно подстроить терминал под свои нужды:

  • Цвета терминала — классическая тёмная схема (белое на чёрном), светлая схема (чёрное на белом), которую легче читать при ярком дневном свете, или как тема приложения — она переключается автоматически вместе с темой приложения. Изменение применяется сразу, в том числе к уже открытым сессиям.
  • Не выключать экран — не даёт дисплею гаснуть, пока открыт терминал. Удобно при просмотре логов или длительных команд. По умолчанию выключено.
  • Размер шрифта по умолчанию — размер текста, с которого начинаются новые сессии терминала; масштаб каждой сессии по-прежнему можно менять жестом.
  • Буфер прокрутки, инвертированная прокрутка и подсказки команд — управляют тем, сколько истории вывода сохраняется, направлением прокрутки и панелью подсказок, описанной выше.
  • Действие двойного касания — по желанию двойное касание терминала отправляет Tab (автодополнение) или Tab дважды (показывает все варианты). По умолчанию выключено. На iOS, пока опция выключена, двойное касание выделяет слово.

// ПАНЕЛЬ ДОПОЛНИТЕЛЬНЫХ КЛАВИШ

Когда открыта экранная клавиатура, над ней появляется ряд кнопок-ярлыков. Прокручивайте панель вбок, чтобы добраться до всех клавиш.

Клавиши-модификаторы

Ctrl и Alt работают как залипающие переключатели — нажмите одну, затем нажмите букву, чтобы отправить сочетание. Они сбрасываются автоматически после следующего нажатия.

  • Ctrl+C — прервать выполняющийся процесс.
  • Ctrl+D — отправить EOF / закрыть оболочку.
  • Ctrl+Z — приостановить процесс.
  • Ctrl+L — очистить экран.

Режим слов

Значок проверки орфографии переключает клавиатуру между режимом терминала и режимом слов. В режиме терминала (по умолчанию) автозамена и подсказки слов отключены — это идеально для команд и путей к файлам. В режиме слов клавиатура ведёт себя как в обычном текстовом поле, с включёнными подсказками и автозаменой. Полезно, когда вы печатаете обычный текст через SSH, например при работе с Claude Code или другими интерактивными инструментами.

На Android режим слов также нужен для голосового ввода. Кнопке микрофона на клавиатуре требуется настоящее текстовое поле для записи, поэтому в режиме терминала диктовка ничего не вводит — перед диктовкой переключитесь в режим слов.

Навигация и редактирование

  • ESC — клавиша Escape.
  • Tab — автодополнение оболочки.
  • ↑ ↓ ← → — клавиши-стрелки курсора.
  • Home / End — переход в начало или конец строки.
  • PgUp / PgDn — страница вверх / страница вниз.
  • Del — удаление вперёд (символ справа от курсора).
  • Вставить — вставить содержимое буфера обмена в терминал.

Функциональные клавиши

Прокрутите панель вправо, чтобы добраться до F1 — F12.

Раскладки и свои панели

У панели несколько раскладок. Нажмите клавишу ⇄ на панели, чтобы переключить: клавиши уступают место списку доступных панелей, нажмите одну — и готово, выбор запоминается. Панели также можно выбирать и настраивать в Настройки → Терминал → Панель дополнительных клавиш → Настроить.

  • Стандартная — классический один ряд с прокруткой.
  • Естественная — один ряд, упорядоченный по частоте использования, с / - | ~ и стрелками в порядке клавиатуры (← ↑ ↓ →).
  • Естественная ×2 — два ряда во всю ширину: ESC / - Home ↑ End PgUp над Tab Ctrl Alt ← ↓ → PgDn.
  • Естественная ×3 — то же плюс третий ряд с функциональными клавишами.
  • Минимальная — только ESC, Tab, Ctrl и стрелки, для узких экранов.

Чтобы создать свою, продублируйте шаблон (меню ⋮ рядом или долгое нажатие на iOS) или создайте новую панель. Редактор показывает панель ровно такой, какой она будет: нажмите клавишу, чтобы выбрать её, затем кнопками ниже переместите её влево или вправо, в другой ряд, измените, добавьте клавишу после неё или удалите. Каждый ряд может прокручиваться (клавиши сохраняют естественную ширину) или заполнять ширину экрана (до примерно девяти клавиш в ряду на телефоне). До трёх рядов; размер клавиш регулируется.

Помимо обычных клавиш, своя панель может содержать текстовые клавиши: любой текст, отправляемый как есть — одиночный |, префикс sudo или целая команда. Используйте \n для Enter, \t для Tab и \e для Escape, и ls -la\n станет макросом в одно нажатие. Есть ещё две клавиши действий: закрепить держит панель видимой при закрытой клавиатуре, клавиатура показывает или скрывает клавиатуру.

Свои панели входят в резервную копию настроек. На Android TV всё работает с пульта: клавиши и кнопки редактора доступны через D-pad.

// ПРОБРОС АГЕНТА

Проброс SSH-агента позволяет использовать ключи, хранящиеся в SSHBorg, для аутентификации дальнейших подключений, выполняемых изнутри удалённого сервера — например, чтобы сделать git clone приватного репозитория или перейти на вторую машину.

Включение проброса в SSHBorg

При добавлении или редактировании хоста включите переключатель Проброс агента. SSHBorg будет выступать SSH-агентом для этой сессии.

Настройка на стороне сервера

Сервер должен разрешать проброс агента. Проверьте /etc/ssh/sshd_config:

AllowAgentForwarding yes

В большинстве систем это значение по умолчанию. После изменения перезапустите демон SSH:

sudo systemctl restart sshd

Настройка клиента для конкретного хоста (необязательно)

Если вы подключаетесь к этому серверу ещё и с ноутбука или настольного компьютера, проброс можно настроить постоянно в локальном ~/.ssh/config:

Host myserver
    HostName 203.0.113.42
    User ubuntu
    ForwardAgent yes
// ЗАМЕЧАНИЕ О БЕЗОПАСНОСТИ
Проброс агента даёт удалённому серверу временный доступ к сокету вашего SSH-агента. Пользователь root (или скомпрометированный процесс) на этом сервере может воспользоваться вашими ключами, чтобы подключиться куда-то ещё, пока ваша сессия активна. Включайте проброс только на серверах, которым вы доверяете.

// ПОДДЕРЖКА УСТАРЕВШИХ ШИФРОВ

Некоторые старые серверы — сетевые устройства, встраиваемые системы или машины с устаревшими версиями OpenSSH — поддерживают только те алгоритмы шифрования, которые современные SSH-клиенты больше не предлагают по умолчанию.

Когда вы включаете переключатель Разрешить устаревшие шифры в настройках хоста, SSHBorg добавляет в список согласования следующие дополнительные алгоритмы:

Добавляемые алгоритмы

  • Шифры: aes128-cbc, aes192-cbc, aes256-cbc, 3des-cbc
  • Обмен ключами: diffie-hellman-group14-sha1, diffie-hellman-group-exchange-sha1, diffie-hellman-group1-sha1
  • Тип ключа хоста: ssh-dss (DSA 1024 бит)

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

// iOS
На iOS ключи хоста ssh-dss недоступны: SSH-библиотека, с которой собрано приложение, больше не включает DSA, поэтому сервер, чей единственный ключ хоста — DSA, недоступен с iPhone или iPad даже при включённой опции.
// ЗАМЕЧАНИЕ О БЕЗОПАСНОСТИ
Алгоритмы из этого списка считаются криптографически слабыми. Включайте эту опцию только для серверов, которые вы не можете обновить.

// ОБРЫВЫ СОЕДИНЕНИЯ И ТЕРМИНАЛЬНЫЕ МУЛЬТИПЛЕКСОРЫ

SSH — это живое TCP-соединение между вашим телефоном и сервером. Если соединение прервётся — пусть даже на секунду — сессия и всё, что в ней выполняется, будет потеряно.

Почему на мобильных соединения обрываются

Мобильные сети особенно склонны к обрывам по нескольким причинам:

  • Смена IP-адреса — в поездке или при переключении между сотовыми вышками оператор может выдать вам новый публичный IP. Поскольку TCP-соединения привязаны к IP-адресу, существующая SSH-сессия сразу становится недействительной.
  • Переход Wi-Fi ↔ мобильная сеть — переключение между Wi-Fi и мобильными данными (или наоборот) меняет ваш IP и разрывает любое открытое TCP-соединение.
  • Тайм-ауты простоя — операторы и NAT-маршрутизаторы часто разрывают неактивные соединения через несколько минут. Долгие, но «молчаливые» сессии (просмотр логов, ожидание ввода) особенно уязвимы.
  • Потеря сигнала — туннели, подземные парковки или просто слабый сигнал могут ненадолго уронить сеть, и этого достаточно, чтобы убить сессию.
  • Ограничения Android в фоне — пока сессия открыта, SSHBorg держит службу переднего плана со своим уведомлением, так что Android больше не останавливает сессии по истечении времени: оставленная открытой сессия продолжает работать, пока вы пользуетесь другими приложениями. Прервать её всё ещё могут телефон, которому нужна память, или энергосбережение, которое некоторые производители применяют к фоновым приложениям — если сессии останавливаются сами, первым делом стоит исключить SSHBorg из оптимизации батареи. Снова открыв приложение, вы можете переподключиться.
  • iOS приостанавливает приложения в фоне — примерно через тридцать секунд после того, как SSHBorg уходит с экрана, iOS приостанавливает его, и соединения обрываются. Когда вы возвращаетесь, SSHBorg сам переподключается (запрашивая пароль, только если он не сохранён) и отмечает это место в выводе: это новая оболочка, а всё, что выполнялось в старой, потеряно. На iOS мультиплексор — единственный способ оставить работу выполняться, пока вы пользуетесь другим приложением.
// ВАЖНО
Если вы выполняете длительную команду (сборку, резервное копирование, миграцию базы данных) прямо в SSH-терминале и соединение обрывается, команда немедленно завершается. Частично выполненная работа может остаться в несогласованном состоянии.

Решение: tmux или screen

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

Это самая полезная привычка для всех, кто управляет серверами с телефона.

Быстрый старт с tmux

tmux доступен в большинстве современных дистрибутивов Linux и является рекомендуемым вариантом.

# Запустить новую именованную сессию
tmux new -s work

# Отсоединиться от сессии (оставить её работать)
Ctrl+B, затем D

# Показать список запущенных сессий
tmux ls

# Снова присоединиться к сессии
tmux attach -t work

# Присоединиться к самой последней сессии
tmux attach

Быстрый старт со screen

screen старше, но доступен практически в любой Unix-системе, включая минимальные серверные образы, где tmux может быть не установлен.

# Запустить новую именованную сессию
screen -S work

# Отсоединиться от сессии
Ctrl+A, затем D

# Показать список запущенных сессий
screen -ls

# Снова присоединиться к сессии
screen -r work

Рекомендуемый порядок работы на телефоне

  1. Подключитесь к серверу через SSHBorg.
  2. Сразу запустите или присоедините сессию tmux/screen: tmux attach || tmux new -s main
  3. Выполняйте команды внутри мультиплексора.
  4. Если соединение оборвётся, просто переподключитесь — ваша сессия на месте.
// СОВЕТ
Можно добавить tmux attach || tmux new -s main в ~/.bashrc или ~/.zshrc на сервере, чтобы сессия мультиплексора запускалась автоматически при каждом входе через SSHBorg.

// JUMP HOSTS

Jump host (его также называют бастионом) — это промежуточный сервер, через который нужно пройти, чтобы добраться до целевого сервера, недоступного из интернета напрямую. SSHBorg изначально поддерживает одиночные и многозвенные цепочки переходов.

Настройка jump host в SSHBorg

  1. Добавьте сервер-бастион как обычный хост в SSHBorg (например, bastion).
  2. Добавьте целевой сервер как ещё один хост.
  3. В настройках целевого хоста укажите в поле Jump host созданный вами бастион.
  4. Включите Проброс агента на записи бастиона — это позволит пробросить ваш ключ через бастион для аутентификации на целевом сервере.
// КАК ЭТО РАБОТАЕТ
SSHBorg сначала устанавливает SSH-соединение с бастионом, а затем открывает через него проброшенный TCP-канал к целевому серверу. Ваш закрытый ключ никогда не покидает телефон — бастион лишь проксирует зашифрованный поток.

Многозвенные цепочки

Если нужно пройти более чем через один промежуточный сервер (например, интернет → bastion → dmz → target), создайте запись для каждого звена и свяжите их:

  • bastion — без jump host, проброс агента включён
  • dmz — jump host = bastion, проброс агента включён
  • target — jump host = dmz
// ВАЖНО
Проброс агента должен быть включён на каждом промежуточном звене, а не только на первом. Без этого цепочка аутентификации разрывается, и подключение к конечному серверу завершится ошибкой «permission denied».

Эквивалентная ручная настройка (для справки)

Аналогичная конфигурация в настольном ~/.ssh/config выглядит так:

Host bastion
    HostName bastion.example.com
    User admin
    ForwardAgent yes

Host target
    HostName 10.0.1.50
    User ubuntu
    ProxyJump bastion
    ForwardAgent yes

С такой конфигурацией команда ssh target на ноутбуке прозрачно проходит через бастион.

Требования к межсетевому экрану

  • Ваш телефон должен иметь доступ к бастиону по его SSH-порту (обычно 22).
  • Бастион должен иметь доступ к целевому серверу по его SSH-порту.
  • Целевой сервер не обязан быть доступен напрямую с вашего телефона.

// НЕСКОЛЬКО СЕССИЙ

SSHBorg позволяет держать открытыми одновременно несколько сессий SSH-терминала и файлового менеджера SFTP, даже к разным серверам.

  • Нажмите на хост, чтобы открыть терминал, или выберите Файлы в его меню, чтобы открыть файловый менеджер. Если у хоста уже есть открытые сессии, то же меню открывает новые.
  • Переключайтесь между открытыми сессиями вкладками под терминалом; хост с несколькими сессиями открывает нумерованный выбор.
  • Сессии остаются активными в фоне, пока держится сетевое соединение, — на iOS лишь недолго, см. Обрывы соединения.
  • В списке хостов рядом с каждым хостом показывается небольшой значок с количеством активных SSH- и SFTP-сессий, так что с одного взгляда видно, что открыто.
// СОВЕТ
Длительные команды (сборки, резервные копии, просмотр логов) продолжают выполняться, даже когда вы переключаетесь на другую сессию. Используйте на сервере терминальный мультиплексор вроде tmux или screen, если хотите, чтобы они пережили и обрыв SSH-соединения.

// БЕЗОПАСНОСТЬ ПРИЛОЖЕНИЯ

Блокировка приложения

Выберите способ защиты в Настройки → Безопасность → Блокировка приложения: Нет (по умолчанию), Только биометрия (отпечаток пальца или распознавание лица), Блокировка устройства (PIN, графический ключ или пароль устройства в дополнение к биометрии) или встроенный PIN либо парольная фраза. Когда блокировка активна, SSHBorg требует аутентификацию, прежде чем показать любые хосты, учётные данные или данные сессий. Если аутентификация отклонена или вы её отменили, приложение остаётся на своём экране блокировки с кнопкой для повторной попытки — оно не закрывается, поэтому открытые сессии останутся на месте после разблокировки.

Встроенный PIN или парольная фраза работает на любом устройстве, даже без биометрического оборудования или системной блокировки экрана — поэтому это правильный выбор на Android TV. Чтобы изменить или убрать его, сначала запрашивается текущий. Его нельзя восстановить, если забыли: придётся очистить данные приложения или переустановить его, поэтому храните резервную копию своих хостов.

Можно задать тайм-аут бездействия — по истечении заданного времени в фоне приложение блокируется автоматически.

// iOS
Блокировка предлагает Нет, Только биометрия (Face ID или Touch ID) и Блокировка устройства (код-пароль устройства или биометрия). Встроенного PIN или парольной фразы нет.

Защита от скриншотов

По умолчанию SSHBorg блокирует скриншоты и запись экрана, чтобы конфиденциальное содержимое терминала не утекло через экран недавних приложений или инструменты захвата экрана.

Если вам нужно сделать скриншот (например, чтобы поделиться выводом терминала), защиту можно временно отключить в Настройки → Безопасность → Разрешить скриншоты.

// iOS
iOS не позволяет приложению блокировать скриншоты и запись экрана, поэтому такой настройки нет. При включённой блокировке приложения SSHBorg скрывает своё содержимое, как только уходит с экрана, так что хосты и терминалы не видны в переключателе приложений.

Хранение учётных данных

Когда включено Шифровать чувствительные данные (см. SSH-ключи), пароли и закрытые ключи хранятся зашифрованными ключом из Android Keystore — аппаратно защищённого на Android 10+ — или, на iOS, из Связки ключей, ограниченным этим устройством. Учётные данные никогда не записываются во внешнюю память и никуда не передаются.

// ЗАМЕЧАНИЕ О РЕЗЕРВНОМ КОПИРОВАНИИ
Поскольку ключ шифрования никогда не покидает защищённое оборудование устройства, ключи нельзя восстановить из облачной или локальной резервной копии, и они не перенесутся на новый телефон автоматически. Перед сменой устройства обязательно авторизуйте на всех своих серверах новый ключ, созданный на новом устройстве.

Самая надёжная настройка

Каждая часть выше полезна сама по себе. Вместе это самое надёжное, что может дать приложение, и это две минуты:

  1. Включите Настройки → Безопасность → Шифровать чувствительные данные.
  2. Поставьте блокировку приложения на Только биометрия — или на PIN или пароль, если не хотите полагаться на биометрию телефона.
  3. Поставьте время блокировки на Сразу или не больше 30 секунд.
  4. Создайте в приложении новый ключ с названием, по которому понятно, какое это устройство.
  5. Добавьте этот ключ на свои серверы и пользуйтесь им вместо пароля.

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

Чего всё это не может: если скомпрометирован сам телефон, вместе с ним скомпрометирован и этот ключ, чем бы он ни был защищён на диске. Пароль его тоже не спасёт — кто может прочитать хранилище приложения, прочитает и то, что вы набираете. Именно поэтому SSHBorg спрашивает пароль ключа один раз, при импорте, и хранит ключ открытым, а не пароль (см. Ключи SSH).

// РЕЗЕРВНАЯ КОПИЯ НАСТРОЕК

SSHBorg умеет экспортировать и импортировать конфигурации хостов и настройки приложения в виде JSON-файла. Это позволяет перенести список серверов на другое устройство или хранить переносимую копию своей конфигурации.

// ВАЖНО
Резервная копия содержит конфигурации хостов и настройки приложения (терминал, оформление, поведение). Пароли и SSH-ключи никогда не экспортируются — материал ключа придётся настроить заново на новом устройстве. Однако резервная копия сохраняет имя ключа, который использует каждый хост: если перед импортом создать ключ с таким же именем, его хосты автоматически привяжутся к нему снова.

Экспорт

Перейдите в Настройки → Резервная копия → Экспорт копии. Выберите, куда сохранить файл, с помощью системного диалога. По умолчанию файл называется sshborg_backup.json (sshborg-backup-дата.json на iOS).

Импорт

Перейдите в Настройки → Резервная копия → Импорт копии. Выберите ранее экспортированный (или созданный вручную) файл .json. SSHBorg объединит его с существующим списком хостов:

  • Хосты, чья метка совпадает с существующей записью, обновляются.
  • Хосты с новой меткой добавляются.
  • Хосты, отсутствующие в файле, остаются без изменений.
  • Обновляемый хост сохраняет пароль, ключ и принятый ключ хоста — резервная копия их никогда не содержит.
  • Хост без ключа привязывается к ключу, имя которого совпадает с экспортированным keyLabel, если такой есть; иначе поле игнорируется.
  • Обновлённый хост сохраняет данные использования, уже имеющиеся на этом устройстве — последнее подключение, счётчик и ручную позицию; файл заполняет только недостающее.

Формат JSON

Файл экспорта — это обычный объект JSON. Его можно создать и вручную, чтобы массово импортировать список серверов из другого источника.

{
  "version": 7,
  "exported_at": "2026-05-14T10:00:00Z",
  "groups": [
    { "name": "Продакшн", "color": -1754827, "position": 0 }
  ],
  "hosts": [
    {
      "label":           "Мой VPS",
      "hostname":        "203.0.113.42",
      "port":            22,
      "username":        "ubuntu",
      "agentForwarding": false,
      "jumpMode":        "simple",
      "jumpHosts":       null,
      "jumpHostIdList":  null,
      "portForwardings": null,
      "sftpStartMode":   "last",
      "sftpStartDir":    null,
      "sftpShowHidden":  false,
      "allowLegacyCiphers": false,
      "position":        0,
      "lastConnected":   1757404800000,
      "connectCount":    12,
      "keyLabel":         "Ключ моего VPS",
      "group":           "Продакшн"
    }
  ],
  "settings": {
    "night_mode":            0,
    "scrollback_lines":      2000,
    "terminal_font_size":    13,
    "terminal_color_scheme": 0,
    "double_tap_action":     0
  }
}

Необязательный объект settings содержит настройки приложения и записывается автоматически при экспорте; при создании файла вручную его можно опустить.

Описание полей

  • label — отображаемое имя в SSHBorg. Используется как уникальный ключ при объединении во время импорта. Обязательное.
  • hostname — адрес сервера или IP (IPv4 или IPv6). Обязательное.
  • port — SSH-порт. По умолчанию 22.
  • username — пользователь для входа. Обязательное.
  • agentForwarding — true, чтобы включить проброс SSH-агента. По умолчанию false.
  • jumpMode — "simple" (использовать текст jumpHosts) или "host_list" (использовать внутренние идентификаторы хостов SSHBorg). При создании файла вручную используйте "simple".
  • jumpHosts — промежуточные хосты через запятую в формате [user@]host[:port]. Используется только когда jumpMode равен "simple".
  • portForwardings — правила локального проброса портов, по одному на строку, в синтаксисе SSH -L, например "8080:localhost:8080".
  • sftpStartMode — начальный каталог SFTP: "last" (запоминать последний посещённый), "fixed" (всегда использовать sftpStartDir), "home" (домашний каталог на сервере). По умолчанию "last".
  • sftpStartDir — путь, используемый когда sftpStartMode равен "fixed".
  • sftpShowHidden — true, чтобы показывать скрытые файлы (dotfiles, имена, начинающиеся с ".") в браузере SFTP этого хоста. По умолчанию false.
  • allowLegacyCiphers — true, чтобы включить устаревшие алгоритмы шифрования, описанные выше. По умолчанию false.
  • keyLabel — имя SSH-ключа, который использует этот хост. При импорте, если ключ с таким именем существует, он привязывается к хосту; иначе поле игнорируется. Сам ключ никогда не включается в резервную копию.
  • group — имя группы, к которой принадлежит хост. Группы перечисляются в массиве groups верхнего уровня с полями name и color (ARGB как знаковое 32-битное целое). Если хост ссылается на группу, которой нет в массиве, она создаётся автоматически с цветом по умолчанию — поэтому при написании файла вручную массив можно вообще опустить.
  • color — необязательный собственный цвет хоста (ARGB как знаковое 32-битное целое). Он перекрывает цвет группы.
  • position — место хоста в ручном порядке, считая внутри его раздела (блок без группы или одна группа). Если опустить, хост добавляется в конец. У групп есть собственная position в массиве groups.
  • lastConnected — время последнего подключения, в миллисекундах с эпохи Unix. Питает порядок «недавние».
  • connectCount — сколько терминальных сессий было открыто к этому хосту. Питает порядок «часто используемые».
// НЕОБЯЗАТЕЛЬНЫЕ ПОЛЯ
Все поля, кроме label, hostname и username, необязательны. Пропущенные поля принимают значения по умолчанию.

// ANDROID TV

SSHBorg работает на Android TV и Google TV. Управляется с пульта (D-pad), но так как это приложение с большим объёмом текста, физическая клавиатура очень помогает.

Навигация с пульта

  • Стрелки D-pad — перемещают фокус между строками и элементами.
  • OK (центр) — основное действие: подключиться к хосту, открыть папку, скачать файл, развернуть группу.
  • Назад — на уровень выше или выход с экрана.

Открытие меню строки

Чтобы переименовать, удалить, изменить, дублировать или скачать из строки, откройте её меню: нажмите клавишу Меню (опции) на пульте на выделенной строке или удерживайте OK (долгое нажатие). OK сам по себе выполняет основное действие, а не меню.

Ввод текста: используйте физическую клавиатуру

Физическая клавиатура — USB или Bluetooth (Android TV поддерживает обе) настоятельно рекомендуется и практически необходима для терминала. С ней текстовые поля и оболочка работают как обычно.

Без неё экранная клавиатура всё же годится для коротких вводов: выделите поле, нажмите OK, чтобы открыть его, наберите текст и нажмите OK / Go на клавиатуре для подтверждения — в запросе пароля это подключает напрямую. Однако вводить команды оболочки экранной клавиатурой неудобно.

Блокировка приложения на TV

У TV обычно нет сканера отпечатков или блокировки экрана, поэтому защитите приложение встроенной блокировкой PIN или парольной фразой (Настройки → Безопасность) — она полностью работает с пульта или клавиатуры. См. Безопасность приложения.

// ЛИЦЕНЗИИ ОТКРЫТОГО КОДА

SSHBorg — свободное программное обеспечение под GNU General Public License v3. Исходный код опубликован на GitHub, и для Android, и для iOS. Используются следующие библиотеки, каждая под своей лицензией:

  • mwiede/JSch — протокол SSH в Android — лицензия в стиле BSD
  • Bouncy Castle — криптография в Android — лицензия в стиле MIT
  • sora-editor — компонент редактирования текста для правки файлов на сервере, в Android — GNU LGPL v2.1
  • libssh2 — протокол SSH в iOS — лицензия BSD

Ни одна из них не соединяется ни с чем самостоятельно: SSHBorg обращается только к серверам, которые вы указали, и к sshborg.com, когда вы нажимаете ссылку. Никаких библиотек аналитики, рекламы или трекеров.

⚙⚙⚙