Тот кто скажет, что администрирование серверов с современных мобильных устройств — это жесть и хардкор, тот скорее всего не знает, что такое разработка wap сайтов на wml с Siemens A60. Тот не знает, что такое радость первого удачного взлома с Siemens C75, когда ради смеха ты «потрошишь» аккаунты юзеров несчастных знакомств, отправляя им xss payload-ы. Тот не знает, что такое запустить сервер с php и apache на Nokia N70, и написать вполне себе рабочую баннерную сеть в среде 3 на 4 сантиметра. Но вернемся к современным инструментам))
Рассмотрим настройку bash окружения оболочки и Android программы для работы по SSH, т.к. Apple не признаю. Впрочем и гугл с мелкомягкими не сильно жалую, но что поделаешь с корпорациями «добра». Подключаться к 4-м администрируемым серверам мы будем из Termux, причем без набора команд ssh — всего в пару кликов.
Termux
Именно этот эмулятор терминала нам понадобится под Android. Поиск и установка пакетов в терминале выполняется так:
pkg search openssh pkg install openssh
Или вот так:
apt install bash-completion
Но прежде чем начать работу с терминалом настоятельно рекомендую поставить правильную клавиатуру и языковые пакеты словарей с автозавершением ввода.
В Play маркете нам понадобятся:
- Hacker’s keyboard
- English completion dictionary
- Russian dictionary
Очень классная клава, советую даже не хацкерам.
Теперь в Termux настроим приглашение ввода, поскольку $PS1 по умочанию не даёт никакой информативности о текущем каталоге, выводя лишь значок доллара.
vi .bashrc
Да, vi таки придется освоить, именно он более удобен на мобильном терминале, чем nano. Хотя дело вкуса…
И добавляем строчки:
PS1="\[\033[1;32m\]\w\[\033[0;36m\]$ \[\033[0m\]\[\033[0m\]" eval `ssh-agent`
Текущий каталог мы раскрасили светло-зеленым и доллар бирюзовым. Большего нам не нужно, доллар на решетку менять не будем, т.к. устройство всё равно не рутовано. И при входе в терминал сразу же запускаем ssh-agent
Отлично. Кто я?
~$ whoami u0_a207
Где я?
~$ pwd /data/data/com.termux/files/home
Предположим, у нас уже есть приватный ключ id_rsa подходящий к 4 серверам от юзеров sudo. Если ещё не настроили доступ по ключам, то:
Добавление юзера sudo на сервер с авторизацией по SSH ключам
Естественно, наш приватный ключ защищен паролем, на случай утечки файла ключа в чужие руки. Этот ключик нам необходимо разместить тут:
/data/data/com.termux/files/home/.ssh/id_rsa
Наш домашний каталог в Termux, в котором мы находимся это:
/data/data/com.termux/files/home/
Как настроить доступ к Android по ssh мы рассмотрим в следующей статье, сейчас же нам просто нужно залить ключ на место и поставить ему права 600.
Из не рутованого устройства мы не сможем перейти файловыми менеджерами в каталог /data/ поскольку это системная папка. Значит зальем файл в любой доступный нам каталог и переместим командой в нужное место:
mv /sdcard/Download/id_rsa /data/data/com.termux/files/home/.ssh/id_rsa chmod 600 chown u0_a207: /data/data/com.termux/files/home/.ssh/id_rsa
Вот и пришло время, написать наш дружелюбный скриптик, который лишь в первый запуск спросит пароль от нашего приватного ключа, а дальше мы сможем подключаться к серверам буквально в 1 клик.
Назовем его sos. Всё же должно случиться нечто экстренное, чтобы влазить дрочиться с мобильного в терминале)) Ну например — лень)) встать с дивана и включить комп, когда нужно глянуть/сделать что-то по мелочи. Бывает же такое.
Файл скрипта необходимо создать тут:
vi /data/data/com.termux/files/usr/bin/sos
Именно этот bin каталог прописан в $PATH в эмуляторе Termux
~$ echo $PATH /data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets
А вот и наш лаконичный помощник:
#!/data/data/com.termux/files/usr/bin/bash [ ! "$(ssh-add -l | grep -i rsa)" ] && ssh-add ~/.ssh/id_rsa select_srv() { echo '------------------' echo '192.168.1.100 - press [a/A]' echo '192.168.1.101 - press [b/B]' echo '192.168.1.102 - press [c/C]' echo '192.168.1.103 - press [d/D]' echo '------------------' echo 'Press [E/e] to exit' echo '------------------' echo -n 'Select server: ' read -n1 s echo case "$s" in "a" | "A") ssh [email protected] -p2449 -i ~/.ssh/id_rsa ;; "b" | "B") ssh [email protected] -p3782 -i ~/.ssh/id_rsa ;; "c" | "C") ssh [email protected] -p2881 -i ~/.ssh/id_rsa ;; "d" | "D") ssh [email protected] -p4529 -i ~/.ssh/id_rsa ;; "e" | "E") echo Bye bye! exit 0 ;; *) printf "\033[0;31mUnknown server...\033[0m\n" ;; esac } while true; do select_srv done exit 0
Обратите внимание, на шебанг:
#!/data/data/com.termux/files/usr/bin/bash
именно тут рапологается bash в Termux
Попробуем:
Пароль ключа спрашивается только при первом запуске скрипта. Далее набираем sos и получаем лаконичное меню серверов. Достаточно 1 нажатия в любом регистре, для подключения к любому выбранному серверу по ssh. Отключение от текущего сервера возвращает нас снова в меню скрипта sos. Неверный выбор возвращает меню и красноречивую ошибку Unknown server. Для возвращения в Termux жмем E в любом регистре.
Вот пример с парочкой реальных серверов:
UPD: немножко поюзав эту весьма удобную программку, нашел моменты, которых в ней не хватает.
Во-первых добавим приём параметров сразу в командной строке, чтобы для подключения к нужному серверу можно было набирать команду вида: sos b и сразу минуя меню, происходило подключение к нему.
Во-вторых ssh позволяет удаленно выполнять команды, почему бы нам по аргументу u(или выбору в меню u) не получать например состояние uptime всех серверов.
Обновлённый код программки со скринов выше:
#!/data/data/com.termux/files/usr/bin/bash [ ! "$(ssh-add -l | grep -i rsa)" ] && ssh-add ~/.ssh/id_rsa select_srv() { echo '------------------' if [ "$1" ]; then s=$1 else echo '192.168.1.100 - press [A] (root)' echo '192.168.1.101 - press [B]' echo '192.168.1.102 - press [C]' echo '192.168.1.103 - press [D]' echo '192.168.1.104 - press [X]' echo '192.168.1.105 - press [Y] (root)' echo '------------------' echo 'Press [U] from get uptimes' echo 'Press [E] to exit' echo '------------------' echo -n 'Select server: ' read -n1 s echo -e '\n------------------' fi case "$s" in "a" | "A") ssh [email protected] -p2411 -i ~/.ssh/id_rsa select_srv ;; "b" | "B") ssh [email protected] -p4433 -i ~/.ssh/id_rsa select_srv ;; "c" | "C") ssh [email protected] -p5522 -i ~/.ssh/id_rsa select_srv ;; "d" | "D") ssh [email protected] -p2262 -i ~/.ssh/id_rsa select_srv ;; "x" | "X") ssh [email protected] -p2277 -i ~/.ssh/id_rsa select_srv ;; "y" | "Y") ssh [email protected] -p2678 -i ~/.ssh/id_rsa select_srv ;; "u" | "U") echo 'Report from servers:' echo '192.168.1.100' ssh [email protected] -p2411 -i ~/.ssh/id_rsa uptime echo '192.168.1.101' ssh [email protected] -p4433 -i ~/.ssh/id_rsa uptime echo '192.168.1.102' ssh [email protected] -p5522 -i ~/.ssh/id_rsa uptime echo '192.168.1.103' ssh [email protected] -p2262 -i ~/.ssh/id_rsa uptime echo '192.168.1.104' ssh [email protected] -p2277 -i ~/.ssh/id_rsa uptime echo '192.168.1.105' ssh [email protected] -p2678 -i ~/.ssh/id_rsa uptime select_srv ;; "e" | "E") echo Bye bye! exit 0 ;; *) printf "\033[0;31mUnknown server...\033[0m\n" select_srv ;; esac } select_srv $1 exit 0