Termux: настроить доступ по ssh между Android и Ubuntu

Этот пост был опубликован мной более года назад. Информация, описанная ниже, уже могла потерять актуальность, но всё ещё может быть полезна.

Photo by Lukas on Unsplash

Привет. Сегодня я хочу связать по SSH два мобильника Samsung A50 и A53 (оба без root-прав) и Ubuntu 22.04, чтобы ходить туда-сюда с любого девайса на любой. Всё происходит дома в рамках одного wifi-роутера.

В сухом остатке всё оказывается быстро и просто. Поднимаем везде ssh-серверы и прописываем друг другу ключи. Специфика только в termux. Ниже расписаны пошаговые команды: чтобы и самому не забыть, и тебе показать, ежели впервые.

Ubuntu

sudo apt install -y openssh-server
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub

Копирую публичный ключ в какой-нибудь общий буфер, типа синхронизируемых заметок, в Избранное в Telegram или т.п.

В файле /etc/ssh/sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes

Стартую sshd:

sudo systemctl restart sshd

Запоминаю IP-адрес сетевого адаптера из ifconfig.

Android (termux)

Порядок действий везде одинаков.

Ставлю из F-Droid, открываю, выполняю команды:

termux-setup-storage
pkg upgrade -y
pkg install -y openssh
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub

Копирую публичный ключ в какой-нибудь общий буфер, типа синхронизируемых заметок, в Избранное в Telegram или т.п.

В файле /data/data/com.termix/files/usr/etc/ssh/sshd_config:

Port 22222
PrintMotd yes
PasswordAuthentication no
Subsystem sftp /data/data/com.termux/files/usr/libexec/sftp-server
ChallengeResponseAuthentication no
PubkeyAuthentication yes

Стартую sshd:

killall sshd; sshd

Запоминаю IP-адрес сетевого адаптера из ifconfig.

Подключение

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

Android => Ubuntu:

ssh user@192.168.1.100

Ubuntu/Android => Android:

ssh 192.168.1.200 -p 22222

Для копирования чего-либо Android => Ubuntu:

scp user@192.168.1.100:/home/user/.bash_aliases ~/.bash_aliases

Для копирования чего-либо Android => Ubuntu/Android:

scp -P 22222 192.168.1.200:/data/data/com.termux/files/home/.bash_aliases ~/.bash_aliases

IP подставь свои, это просто примеры.

FAQ

Q: Почему порт именно 22222?
A: Порт ssh по умолчанию = 22. Диапазон портов 0..1023 доступен только привелегированным пользователям. На моих андроидах root-доступа нет, 22 порт закрыт, поэтому я на рандоме указал этот. Ничто не мешает указать тебе свой порт в sshd_config.

Q: Кто такой этот ваш ed25519?
A: Тип ключа, наиболее адекватный, в разы короче rsa, сейчас поддерживается любым утюгом и делать для этого не надо вообще ничего. Никто не запрещает использовать привычный rsa, просто копипастить его — удовольствие сомнительное.

Я перевёл хорошую статью по поводу ed25519, почитай по пути:

Q: Почему при доступе к Android ты не указал имя юзера и @?
A: Termux — однопользовательское окружение, оно работает от имени текущего юзера Android. При доступе к мобилке указывать username@... можно (причём, вообще любого), но можно и не. Если это принципиально, выполни whoami на мобиле и используй это имя.

Q: У меня возникла ошибка «connection refused», что же делать?
A: Если не указан порт при подключении к Android — указать явно через -p. Убедиться, что на девайсе, к коему подключаешься, прописан ключ девайса, с коего подключаешься. В остальном проблем быть не должно.

Q: У меня возникла ошибка «command not found», как же быть?
A: Установить то, что предложит pkg (apt), wiki или stackoverflow. Я в этом мануале мог что-то не упомянуть явно, поскольку термуксы настроены давно и какой-то софт я мог установить просто как сам собой разумеющийся и забыть.

Q: Я сделал вообще всё как надо, но всё равно ничего не работает.
A: Запусти Termux, выполни команду sshd и сверни приложение. Доступ по ssh будет только пока работает термукс и сервер в нём. Быстро проверить, работает ли sshd, можно командой pidof sshd.


Описанного вполне достаточно, дальше делай что хочешь под свои обстоятельства и потребности.

Использованные материалы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *