Привет. Сегодня я хочу связать по 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
.
Описанного вполне достаточно, дальше делай что хочешь под свои обстоятельства и потребности.