Удобная связка ssh+screen

Иногда возникает задача удаленно администрировать *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, а после подключения вид нашего экрана бубет примерно такой:

screenshot-20090924_1354.png

И, на прощание, подсказки по screen

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.

Подробнее о форматировании

CAPTCHA
Этим вопросом проверяется, человек Вы или робот :-)
Image CAPTCHA
Скопируйте символы с рисунка (большие и маленькие буквы различаются).
Yandex cite