Михаил Юдин

Постоянный доступ к Termux через ssh тоннель

Постоянный доступ к Termux через ssh тоннель

Хочется постоянный доступ к Termux по ssh, но нет прямого доступа к смартфону или планшету по сети? Задачу решим используя домашний сервер или сервис для создания ssh тоннелей.

Пояснение.
На смартфоне запустится сервер на порту 2222.
На удалённой машине должен быть открыт порт 22.
На удалённой машине будет занят (проброшен) порт 3022 для доступа к смартфону.

Подготавливаем Termux

Если Termux только что установлен, делаем pkg update для обновления утилит и списка пакетов.

Для разворачивания нужно:

  • openssh — для доступа к Termux (установятся клиент ssh и сервер sshd);
  • autossh — для поддержания тоннеля;
  • termux-services — для автозапуска autossh.

Установим пакеты разом:

pkg install openssh autossh termux-services

Создание и запуск сервера ssh в Termux

Сначала зададим пароль для доступа к Termux серверу ssh.

passwd

Пропишем порт для сервера в файле ~/../usr/etc/ssh/sshd_config:

Port 2222
PrintMotd no
PasswordAuthentication yes
PubkeyAcceptedKeyTypes +ssh-dss
Subsystem sftp /data/data/com.termux/files/usr/libexec/sftp-server

Перезапустим сервер ssh:

sv down sshd
sv up sshd

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

sv-enable sshd

Перейдём к настройке соединения.

Создание ssh тоннеля

Допустим, что есть сервер ssh например myserver. Это или домашний сервер, или сервис, который предоставляет доступ к ssh серверу. Как пример — Free Linux shell server.

А. Способ создания для ленивых

ssh -R 3022:localhost:2222 myserver.ru

Б. Способ для прагматичных

Чтобы не прописывать каждый раз имя хоста, порт и прочее при соединении с ssh сервером для создания тоннеля, пропишем конфиг ~/.ssh/config. Пример:

Host srv_rev
User username
Port 22
HostName myserver.ru
RemoteForward 3022 localhost:2222
ServerAliveInterval 30
ServerAliveCountMax 1
ExitOnForwardFailure yes

Как создавать ключ для беспарольного входа по ssh читаем в отдельной статье.

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

ssh srv_rev

Если просит пароль — создайте ключ для входа.

Сервис подключения к тоннелю

Так как на предыдущем шаге в конфиге указали RemoteForward, остаётся только подключиться к серверу, используя параметры конфигурации.

Воспользуемся termux-services, чтобы каждый раз не вводить команду для соединения. Утилита запускает приложения сразу при создании сессии Termux (насколько сам понял).

Сервисы добавлять очень просто: создаём папку с названием сервиса, внутри файл run с правами на запуск и shebang который указывает на шелл /bin/sh.

Итак, по шагам:

  • создаём папку
mkdir ~/../usr/var/service/autossh/
  • создаём файл
echo '#!/bin/sh' > ~/../usr/var/service/autossh/run
echo 'exec autossh -M 20022 -NT -f srv_rev' >> ~/../usr/var/service/autossh/run
  • фиксим shebang для Termux
termux-fix-shebang ~/../usr/var/service/autossh/run
  • даём права на исполнение
chmod +x ~/../usr/var/service/autossh/run
  • запускаем сервис
sv up autossh

После этого установится ssh тоннель для доступа к Termux с удалённого сервера, если настроено верно.

Подключаемся к Termux

Соединяемся с удалённым сервером по ssh. Затем подключаемся к ssh в Termux, который затоннелирован на порт 3022:

ssh 127.0.0.1 -p 3022

Что получили в итоге

Теперь после запуска Termux на удалённом сервере появится доступ по тоннелю к терминалу на смартфоне. Так как соединение на смартфоне может обрываться время от времени по разным причинам, autossh поможет переустанавливать соединение к удалённому серверу ssh и восстанавливать тоннель. Желательно, чтобы порт 20022 на удалённой машине был открыт для быстрого реагирования autossh на разрыв соединения.

Ещё почитать

Нет фото

Фикс ошибок компиляции библиотек в Termux

Живая разработка в Epsilon Notes

Живая разработка в Epsilon Notes

Самые полезные приложения для Android

Самые полезные приложения для Android

Нет фото

Android shell scripting. Part 2.

Нет фото

Android shell scripting. Part 1.