April 28, 2020

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

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


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

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

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

  • openssh - для доступа к Termux;
  • 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 сервером для создания тоннеля, пропишем конфиг ~/.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 для Termuxtermux-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 на разрыв соединения.


https://t.me/h4ckers_zone