Тот кто скажет, что администрирование серверов с современных мобильных устройств — это жесть и хардкор, тот скорее всего не знает, что такое разработка 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 username@192.168.1.100 -p2449 -i ~/.ssh/id_rsa
;;
"b" | "B")
ssh username@192.168.1.101 -p3782 -i ~/.ssh/id_rsa
;;
"c" | "C")
ssh username@192.168.1.102 -p2881 -i ~/.ssh/id_rsa
;;
"d" | "D")
ssh username@192.168.1.103 -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 root@192.168.1.100 -p2411 -i ~/.ssh/id_rsa
select_srv
;;
"b" | "B")
ssh username@192.168.1.101 -p4433 -i ~/.ssh/id_rsa
select_srv
;;
"c" | "C")
ssh username@192.168.1.102 -p5522 -i ~/.ssh/id_rsa
select_srv
;;
"d" | "D")
ssh username@192.168.1.103 -p2262 -i ~/.ssh/id_rsa
select_srv
;;
"x" | "X")
ssh username@192.168.1.104 -p2277 -i ~/.ssh/id_rsa
select_srv
;;
"y" | "Y")
ssh root@192.168.1.105 -p2678 -i ~/.ssh/id_rsa
select_srv
;;
"u" | "U")
echo 'Report from servers:'
echo '192.168.1.100'
ssh root@192.168.1.100 -p2411 -i ~/.ssh/id_rsa uptime
echo '192.168.1.101'
ssh username@192.168.1.101 -p4433 -i ~/.ssh/id_rsa uptime
echo '192.168.1.102'
ssh username@192.168.1.102 -p5522 -i ~/.ssh/id_rsa uptime
echo '192.168.1.103'
ssh username@192.168.1.103 -p2262 -i ~/.ssh/id_rsa uptime
echo '192.168.1.104'
ssh username@192.168.1.104 -p2277 -i ~/.ssh/id_rsa uptime
echo '192.168.1.105'
ssh root@192.168.1.105 -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






