Постоянный доступ к 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 на разрыв соединения.