Иногда возникает задача удаленно администрировать *nix-сервера, имея в своем распоряжении только шелл. А еще при этом хочется, чтобы команды, поданные серверу, как можно меньше зависели от качества связи с этим хостом. А! Еще хочется защищенного канала и "многооконности", конечно. И, в принципе, все реализуемо. Приступим.
flint@remoteserver:~$ sudo apt-get install sshd screen dialog
Создаем файл ~bin/choose:
#!/bin/bash USERNAME=`whoami` i=0 declare -ax SCREENS SOCKETS=`find /var/run/screen/S-$USERNAME -type p` if [ -z "$SOCKETS" ] then exit 0 fi for S in $SOCKETS do ((i=$i+1)) S=`basename $S` SCREENS[$i]=`screen -ls | grep $S | perl -e '$s=<>; $s =~ s/^\\t(.*)\s/$1/; $s =~ s/\s/_/g; print $s'` done MENU="" for ((j=1; j<=$i; j=$j+1)) do MENU="$MENU $j ${SCREENS[$j]}" done WHICH=`dialog --stdout --menu Select: 0 0 0 $MENU` echo ${SCREENS[$WHICH]} | sed -e 's/_(.*)$//'
В .bashrc добавляем:
if [ "$SSH_TTY" ]; then if [ ! "$STY" ] ; then CHOICE=`bin/choose` if [ -z "$CHOICE" ] then exec screen else exec screen -dr $CHOICE fi fi fi
Создаем файл .screenrc:
hardstatus alwayslastline hardstatus string '%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]' defscrollback 1000 startup_message off
Итого, мы будем иметь возможность при подключении к уделенной машине выбрать с списке нужную отсоединенную сессию screen, а после подключения вид нашего экрана бубет примерно такой:
И, на прощание, подсказки по screen
Отправить комментарий