Blog

  • Переподключение к сеансу SSH

    В настройках SSH поставил \”не завершать сеанс при разрыве\”. После переподключения не знаю как присовокупиться к висящему сеансу.

    В инете рекомендуют использовать screen, который позволяет использовать несколько псевдотерминалов и подключаться к ним по мере необходимости.
    http://libc6.blogspot.com/2008/09/screen-terminal.html

    Попробую использовать его вместо bash, как оболочку по умолчанию для ssh-сеансов.

    Как настроить автоматический запуск screen при входе по ssh

    Достало постоянно вводить screen -dR при входе на удалённую машину. Погуглив нашёл простое решение. В конце ~/.bashrc дописать:

     if [ -z \"$STY\" ]; then
     exec screen -dR
     fi

    У меня чуть более продвинутый вариант :)

    В конец .bashrc надо добавить

    if [ \"$SSH_TTY\" ]; then
     if [ ! \"$STY\" ]; then
      CHOICE=`SCREEN/choose`
      if [ -z \"$CHOICE\" ];
      then
       exec screen
      else
       exec screen -dr $CHOICE
      fi
     fi
    fi

    и создать файл ~/SCREEN/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 do
    MENU=\"$MENU $j ${SCREENS[$j]}\"
    done
    WHICH=`dialog --stdout --menu Select: 0 0 0 $MENU`
    echo ${SCREENS[$WHICH]} | sed -e \'s/_(.*)$//\'

    При логине будет предлагаться меню со списком имеющихся сессий screen, можно выбрать нужную либо создать новую. Если запущенных screen\’ов нет, автоматически запустится новая сессия.

    Единственная (вроде бы) зависимость — нужно поставить dialog.

    Ссылки:
    http://www.truediamon.ru/content/kak-nastroit-avtomaticheskij-zapusk-screen-pri-vhode-po-ssh