ConnectBot: SSH с Android без аккаунта, Play Маркета и пароля сервера

Нужен шелл с телефона, а ставить закрытый клиент с облачным аккаунтом не хочется. На Huawei часто нет Play Маркета, зато есть F-Droid. ConnectBot как раз из этой полки: первый SSH-клиент для Android, Apache-2.0, без обязательной регистрации.

9 июня 2026 года вышла версия 1.10.9. Сборка с F-Droid называется 1.10.9-oss: криптопровайдер лежит внутри APK, Google Play Services не нужны. Это удобно, когда телефон живёт без GMS.

Зачем ConnectBot, если есть Termux

Termux даёт настоящий OpenSSH: те же команды, что на Linux-десктопе. ConnectBot ближе к обычному SSH-менеджеру: список хостов, ключи в отдельном экране, сессия не обязана выглядеть как дистрибутив в кармане.

Для повседневной жизни это ровно «открытый софт, который открывает сервер с автобуса». Не облако ключей, не подписка, не аккаунт. Ключ лежит в приложении, хост сохраняется локально.

Если пароль на SSH уже выключен (так и стоит делать после рабочего ключа с компьютера), телефон обязан уметь тот же публичный ключ. Иначе ConnectBot честно напишет, что сервер не предлагает пароль и keyboard-interactive, и на этом остановится.

Откуда ставить

Три нормальных источника, в порядке предпочтения для телефона без Play:

  1. Пакет org.connectbot на F-Droid, сборка -oss.
  2. Релизы на GitHub, файл oss, не google-вариант.
  3. Play Store, если он на устройстве есть. Там своя сборка с обновлением криптопровайдера через сервисы Google.

Случайный APK с форума лучше не брать. F-Droid подписывает свою сборку и показывает, что APK соответствует исходникам.

F-Droid: установка ConnectBot от Kenny Root, прогресс загрузки APK
Установка ConnectBot из F-Droid. Кадр 3 сентября 2026, Android без Play Маркета.

На странице пакета F-Droid прямо пишет: это SSH-клиент с открытым кодом, сохранённые хосты, вход по ключу, проброс портов, цветовые схемы. И отдельно: oss-сборка не зависит от Google Play Services.

Страница ConnectBot в F-Droid: описание oss-сборки без Google Play Services
Описание oss-сборки в F-Droid. Криптопровайдер внутри APK, без Play Services.

Один ключ с компьютера или новый с телефона

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

Второй путь короче, но риск общий: украли телефон, сгорел и вход с компьютера. Тогда ключ меняют на обоих устройствах. Приватник не стоит слать почтой и мессенджером. Кабель, прямое копирование в Download, потом в приложение.

В файловом менеджере Android ключ без расширения часто выглядит как «bin file». Это нормально: OpenSSH так и хранит приватник. Импортировать нужно его, не .pub. Публичный файл на сервер уже положили, клиенту он для входа не подставляется.

Почему ConnectBot орёт «неверный пароль»

Современный ssh-keygen -t ed25519 пишет файл в формате OpenSSH:

-----BEGIN OPENSSH PRIVATE KEY-----

С OpenSSH 7.6 такие ключи по умолчанию шифруются aes256-ctr и bcrypt KDF. Tabby и обычный ssh это открывают. ConnectBot на импорте часто отвечает fail to decrypt / bad password, хотя фраза от ключа та же самая, которой только что пустили с компьютера.

Это не раскладка и не «вы опечатались». Приложение не расшифровывает новый контейнер. Обходной путь давно описан в issue 742: копия ключа в старом шифре aes256-cbc.

Команды ниже выполняются на компьютере, где лежит приватник. На сервере этого файла нет и быть не должно.

cp ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.cb
ssh-keygen -p -f ~/.ssh/id_ed25519.cb -Z aes256-cbc

Сначала old passphrase (тот, которым открывается оригинал), затем новая для копии. Оригинал для десктопного клиента не трогается. На телефон копируется только id_ed25519.cb.

Если ssh-keygen говорит, что файла нет, скорее всего команда запущена по SSH на VPS. Приватник там не хранят. Проверка: hostname должен показать десктоп, не сервер.

Ключ импортировали. Его ещё надо открыть

В ConnectBot экран называется «Публичные ключи», хотя речь про пару. После импорта ключ висит с закрытым замком. Пока замок закрыт, при подключении приложение пробует «авторизацию публичными ключами с памяти» и часто шлёт пустышку или другой ключ.

Нужно тапнуть ключ и ввести passphrase копии (той, что задали после -Z aes256-cbc), не фразу оригинала для десктопного клиента. Замок открывается, тип ключа в списке: Ed25519.

ConnectBot: меню импортированного ключа Ed25519, экспорт OpenSSH и PEM
Импортированный Ed25519 в ConnectBot. Экспорт OpenSSH и PEM, копирование открытой части.

Если в приложении ещё и сгенерировали второй ключ кнопкой «плюс», его публичной строки на сервере нет. Либо не выбирайте его в карточке хоста, либо скопируйте открытый ключ из меню и допишите в authorized_keys.

Карточка хоста

Долгий тап по серверу, затем правка:

  • пользователь тот же, под которым ключ лежит в authorized_keys;
  • адрес сервера;
  • порт не 22, если sshd слушает другой (его легко забыть, тогда ConnectBot молча не попадёт в ваш sshd);
  • аутентификация открытым ключом включена;
  • выбран именно импортированный и разблокированный ключ;
  • пароль пустой.

После этого сессия открывается обычным приглашением шелла. В списке хостов ConnectBot показывает зелёную галочку на сохранённом сервере.

ConnectBot: сохранённый хост MY-KZ, меню правки сервера и перенаправления портов
Сохранённый хост в ConnectBot. Порт и ключ уже в карточке, дальше правка или дублирование.
ConnectBot: успешный вход в bash на удалённом Linux-сервере
Сессия открылась. Ключ разблокирован, пароль сервера не спрашивают.

Дальше это обычный Linux: htop, логи, правки конфигов. С телефона неудобно писать длинные конфиги, зато можно посмотреть нагрузку и не ждать ноутбука.

ConnectBot: htop на удалённом сервере Ubuntu
htop с телефона. ConnectBot держит полноценный терминал, не «урезанный шелл для красоты».

Что означает фраза про пароль и клавиатуру

Если на сервере выключены PasswordAuthentication и KbdInteractiveAuthentication, sshd предлагает только publickey. ConnectBot в этот момент пишет примерно так: пробуем ключ из памяти, сервер не поддерживает пароль и интерактивную клавиатуру.

Это не поломка sshd. Это как раз желаемое состояние. Сообщение значит: ключ не приняли, запасного входа нет. Дальше смотрят замок ключа, порт, имя пользователя и то, та ли публичная строка лежит в authorized_keys.

Выключать пароль стоит только после рабочего входа по ключу с компьютера и при живой консоли в панели хостера. Иначе один кривой reload sshd оставляет сервер без входа.

Где обычно ломается

  • В ConnectBot указан .pub вместо приватника. Другие клиенты (Tabby) на этом прямо говорят: expected a private key.
  • Ключ импортирован, но замок закрыт.
  • Формат OpenSSH aes256-ctr, ConnectBot не расшифровывает, кажется, что «пароль не тот».
  • Порт 22, а sshd слушает другой.
  • На сервере в authorized_keys нет этой публичной строки, зато есть другая.
  • Сессия ConnectBot переиспользует старое TCP-соединение. Для проверки закрывают все вкладки на этот хост и подключаются заново.

На Ubuntu эффективный конфиг смотрят так:

sshd -T | grep -Ei '^(port|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication) '

В логе успех выглядит как Accepted publickey и отпечаток ключа. Неудачный publickey на свежем OpenSSH часто не пишется на уровне INFO, виден обрыв [preauth].

Если ConnectBot всё равно не подходит

Termux плюс пакет openssh ест тот же файл, что и десктоп, без перекодирования шифра. Это скучнее по интерфейсу и честнее по совместимости.

pkg install openssh
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cp ~/storage/downloads/id_ed25519 ~/.ssh/
chmod 600 ~/.ssh/id_ed25519
ssh -i ~/.ssh/id_ed25519 -p PORT -o IdentitiesOnly=yes USER@HOST

После копирования файл из Download лучше удалить, чтобы приватник остался только в ~/.ssh/.

Коротко

ConnectBot закрывает простую задачу: SSH с Android без аккаунта и без Play. С F-Droid он ставится на Huawei. Современный Ed25519 с компьютера нужно либо перешифровать копию под aes256-cbc, либо завести отдельный ключ в самом приложении. И ключ после импорта ещё разблокируют. Пароль на сервере при этом может оставаться выключенным: так и задумано.

Источники


Комментарии загружаются…