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

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

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

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

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

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

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

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

и создать файл ~/SCREEN/choose:

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

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

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

Консольный менеджер screen

Тема этой заметки будет полезна не только начинающим системным администраторам, работающим в консоли, но и будет познавательно рядовым пользователям, которые знают о существовании консоли и иногда, 🙂 ее даже запускают. Речь пойдет о замечательном и очень простом в использовании консольном менеджере окон GNU Screen. Возможности Screen впечатляют и позволяют эффективно работать в консоли. Основными возможностями Screen можно отметить следующее: создание и управление консольными окнами в пределах одной сессии, Screen позволяет быстро переключаться между окнами, сохранять состояние сессии и позднее подключаться к ней, также предоставлять доступ к этой сессии другим пользователям, обмениваться содержимым окон посредством copy/paste.

Одновременно в окне терминала может находится одно текстовое окно Screen, либо несколько (в этом случае окно терминала будет поделено на регионы). Однако, самая «вкусная» возможность Screen заключается в поддержке сессии. Сессия сохраняется на стороне сервера, поэтому не важно сессия была разорвана в результате сбоя или прервана сознательно, в любой момент времени и с любого устройства можно подключится к имеющейся рабочей сессии с сохранение состояния при отключении, т.е. все консольные окна восстановятся, а приложения запущенные в этих окнах продолжают работать не прерываясь. Очень удобно когда открытую сессию, например на работе, можно продолжить дома.

Перед запуском проверим установлен ли screen в системе

Если в ответ получено примерно такое:

Значит screen установлен в системе и можно продолжать, иначе необходимо установить обычным для вас способом из репозитария системы. Можно и так …

Запускаем .. появится информация о лицензии и версии, нажимаем «Пробел». Этот вывод можно отключить в конфигурационном файле, далее мы это сделаем. Внешне ничего не изменилось. Секрет в том, что screen передает активному окну все команды оставляя для себя только комбинацию Ctrl+a (ее тоже можно переопределить). Все команды screen состоят из комбинации, по-умолчанию Ctrl+a и непосредственно клавиши. Почти у каждой команды имеется текстовый аналог. Для простоты буду использовать следующее сокращение:

  • [Определенная комбинация]+[клавиша] {текстовая команда} — Описание команды
  • [Ctrl+a]+[:] {colon} — Вывести приглашение для ввода текстовых команд в интерактивном режиме;

Управление окнами

У нас имеется уже одно активное окно, оно создается при запуске screen и ему автоматически присваивается номер 0, создадим еще одно:

  • [Ctrl+a]+[c] {screen} — Создать новое окно и присваивает ему следующий порядковый номер;

После создания нового окна оно становится автоматически активным, а предыдущее активное окно переходит в фоновый режим. Причем фоновый режим окна ничем не отличается от обычной сессии. Например, если вы запустили в окне 0 архивацию данных, создали новое окно 1 и в нем начали редактирование какого-то файла, то вы всегда можете переключится в окно 0 и посмотреть закончилась ли архивация. Вот список наиболее часто применяемых команд для управления окнами:

  • [Ctrl+a]+[w] {windows} — Выводит список номеров и заголовков всех окон в нижней строчке экрана;
  • [Ctrl+a]+[«] {windowlist} — Выводит интерактивное меню номеров и заголовков всех окон из которого можно выбрать окошко для переключения;
  • [Ctrl+a]+[Номер окна] {select} — Выбор окна по номеру. Например, команда Ctrl+a и 2 делает текущим окно с номером 2;
  • [Ctrl+a]+[N] {number} — Показать номер и заголовок текущего окна;
  • [Ctrl+a]+[A] {title} — Установить заголовок текущего окна;
  • [Ctrl+a]+[k] {kill} — Принудительное закрытие окна, например, в случае если приложение не удается закрыть обычным способом, равносильно разрыву сессии;

С настройками по-умолчанию screen отображает одно окно, но иногда необходимо видеть несколько консолей. Эта возможность работы с регионами экрана есть у screen, она позволяет разделить экран и отображать несколько окон одновременно и при этом переключаться между ними.

  • [Ctrl+a]+[S] {split} — Разделить текущее окно, или регион на два новых региона. При этом размеры всех регионов меняются для получения дополнительного пространства на экране и в новом регионе отображается пустое окно;
  • [Ctrl+a]+[Tab] {focus} — Переместить текущий фокус отображения на регион ниже, или на верхний регион если текущим является самый нижний регион;
  • [Ctrl+a]+[Q] {only} — Закрыть все регионы кроме текущего;
  • [Ctrl+a]+[X] {remove} — Закрыть текущий регион;

После разделения окна на регионы в одном регионе остается активное окно, а появившийся новый регион пустой. В новом регионе можно переключится на другое окно или выполнить иные действия. В случае, если вы закрываете какое-то окно, нумерация окон не меняется, новые создаваемые окна занимают пропущенные номера. Например, имелась последовательность открытых окон — [0,1,2,3,4,5], вы закрыли 1 и 4 — нумерация будет следующей [0,2,3,5]. При создании нового окна ему будет присвоен номер 1, а следующему 4. Если вы закрываете все окна screen завершает свою работы и выводит сообщение — [screen is terminating].

Работа с текстом

При работе в консоли часто возникает задача скопировать часть кода или длинную shell команду, в этом может помочь screen. У него в запасе много разных возможностей и такие как copy/paste между окнами не исключение.

 

  • [Ctrl+a]+[[] {copy} — Войти в режим копирования;
  • [Ctrl+a]+[]] {paste} — Вставить текст из регистра обмена;

В режиме copy/paste screen запускает встроенный редактор, который напоминает vi.

  • Клавиши управления курсором перемещают курсор по экранному буферу;
  • Клавиша «Пробел» отмечает начало и конец региона для копирования. При втором нажатии «Пробел», отмеченный текст копируется в регистр обмена, и screen выходит их режима копирования;

Консольные сессии

Поддержка сессий одна из самых популярных возможностей screen. Рассмотрим банальную ситуацию: вы, находясь в точке A, подключаетесь к удаленному серверу запускаете некоторое количество задач в разных окнах, закрываете соединение и спокойно занимаетесь своими делами. Через некоторое количество времени (возможно несколько дней), подключаетесь к этому же серверу но уже с точки Б (можно и с точки А, Д и т.д. откуда угодно) восстанавливаете все окна с результатами выполненных задач. Думаете такое не возможно? Как раз консольные сессии screen предназначены для таких возможностей. Они позволяют отключить от терминала текущую сессию со всеми созданными окнами и запущенными в этих окнах приложениями, а через некоторое время подключится к этой сессии с восстановлением состояния окон после отключении. При этом все запущенные в окнах приложения продолжают работать и используют для вывода свои окна. Плюс ко всему таких сессий может быть несколько.

  • [Ctrl+a]+[d] {detach} — Отсоединить консольную сессию и оставить ее запущенной в фоновом режиме;
  • [Ctrl+a]+[D D] {pow_detach} — Отсоединить консольную сессию, оставить ее запущенной в фоновом режиме и послать родительскому процессу screen сигнал HANGUP. При запуске screen из удаленного терминала это означает отсоединение screen и затем закрытие соединения;
  • [Ctrl+a]+[z] {suspend} — Отсоединить консольную сессию и оставить ее запущенной как фоновый процесс родительской командной оболочки. В этом случае для восстановления сессии кроме команд описанных ниже могут быть использованы стандартные команды управления фоновыми процессами командной оболочки;
  • [Ctrl+a]+[Ctrl +] {quit} — Закрыть все окна сессии и выйти из screen. Надо заметить, что многие дистрибутивы переопределяют клавишную комбинацию для этой команды, но текстовую команду можно использовать в любом случае;

Режимы отключения рассмотрели, теперь посмотрим как можно подключится к отсоединенной сессии. Рассматривать 🙂 лучше всего на примере. Для начала нам нужно узнать количество и имена имеющихся открытых сессий.

Здесь видно, что открыто 3 сессии, причем, у каждой есть информация об имени, дате, времени и состоянии. Как отмечалось ранее, к открытой сессии можно подключиться в любое время и даже через несколько дней. Для подключения к имеющейся сессии существует ключ -r. Подключимся к сессии с именем 13051.pts-1.user-desktop.

Для подключения к уже подключенной с другой машины сессии необходимо указать ключ -x вместо -r.

Всего делов то. Есть конечно еще много всяких параметров работы с screen, но в своей работа мне описанного выше хватает, для тех кто хочет узнать больше существует волшебная команда 🙂 man screen или почитать перевод тут.

Конфигурация

Параметры заданные по-умолчанию к любой программе можно изменить под свои требования и предпочтения, утилита screen не исключение. Как и полагается для *nix приложения у нее имеется конфигурационный файл. Он находится в домашней директории пользователя — ~/.screenrc, если отсутствует это означает, что настройка не производилась, просто создайте его и опишите все необходимые настройки сами, руководствуясь документацией или 🙂 знаниями. Приведу пример простого конфигурационного файла, все подробности в #комментариях.

Пожалуй для минимального конфигурационного файла этого достаточно. Теперь при запуске у вас будет создано три окна с именами Work, Config и Logs и появится строка статуса.

Слева будут располагаться текущее время и имя_пользователя@имя_хоста, а справа — имена всех открытых окон в квадратных скобках. При этом текущее активное окно будет помечено звездочкой. Для задания строки статуса screen использует специальные символы, похожие на те, что применяются для формирования приглашения командного интерпретатора. Разукрасить можете по своему усмотрению прочитав руководство.

Asterisk IP PBX ICQ Call Notification

(статью скоро переработаю, т.к. micq уже умер. 891rpm)

(АОН с Asterisk IP PBX на ICQ)

С 22 июня 2005 года работает у нас в службе тех-поддержки ICQ бот под ником Asterisk (UIN не скажу ).Занимается он тем, что по ICQ отправляет техподдержке номер телефона звонящего, дату и время.

Итак.
Имеем настроеный рабочий Asterisk на сервере.
Заходим на сайт http://www.micq.org/download.shtml.en и скачиваем последнюю версию mICQ
(на данный момент это mICQ 0.5.0.4 (released 2005-06-05)). То есть:

 

При запросе UIN смело набираем ‘0’ (просто ноль, кто не понял ) и жмем Enter. Далее придумываем архисложный пароль, вводим, Enter, вводим его еще раз, Enter, дальше если вы работаете через прокси , вводите его параметры, иначе, как все нормальные люди, смело жмете Enter.
Получаем UIN, регистрируемся на сервере.
Если хотите, в консоли mICQ есть команда ‘help’, а есть еще ‘help ‘, то есть что-то вроде ‘help msg’ даст вам справку по отправке сообщений.
Комманда ‘msg 227702532 Hello Anest!!! How are you today guy?’ спросит ‘Как дела?’ у нашего любимого Anest’а, а ‘msg 320598502 Privet rebyata! Pochemu na zvonki ne otvechaete?’ спросит у нашей техподдержки, что это она так расслабилась.
___________________________________________
# Дополнение от 03.07.2005г.
# В консоли mICQ дайте комманду
mICQ> autoaway 0
Changing status to away/not available after idling 0 seconds.
mICQ> save
Saving preferences to /home/roman/.micq/micqrc.
Your personal settings have been saved!

# Это не даст вашему боту эпизодически пропадать в offline.
___________________________________________
Поиграли, выходим из mICQ командой ‘exit’.
Далее:
[[email protected] micq-0.5.0.4]# nano ~/.micq/micqrc

или другим вашим любимым редактором vi, pico, или просто по F4 в ‘mc’ на этом файле, меняем ‘ # password’ на ‘password <тут ваш пароль>’.
Продолжаем:
[[email protected] micq-0.5.0.4]# screen -d -m micq

# Кто не пользуется и не знает, команда ‘screen’ создает нечто вроде виртуального терминала, от которого можно безболезненно отключаться, при этом программа, что запущена в нем, остается там работать в режиме S+, либо Ss+.
Почитайте ‘man screen’ и Краткое руководство по работе в SCREEN на www.opennet.ru.
# Проверяем, что заработало:
[[email protected] micq-0.5.0.4]# ps ax | grep micq | grep -v grep
16046 ? Ss 0:00 SCREEN -d -m micq
16047 pts/2 Ss+ 0:00 micq

# Проверяем еще раз:
[[email protected] micq-0.5.0.4]# screen -R
# Видим консоль mICQ, нажимаем Ctrl+c, потом отдельно ‘d’ — отключаемся от консоли.

Дальше правим конфиг Asterisk’a extentions.conf
[[email protected] micq-0.5.0.4]# sudo nano /etc/asterisk/extensions.conf
# В нужном extention тепосредственно перед Dial вставляем нечто следующее:
exten => 4,7,System(/bin/echo -e "msg <тут UIN, на который хотим слать оповещение> 'Incoming Call From: ${CALLERIDNUM} To: <ваш номер> Received: ${DATETIME:0:2}/${DATETIME:2:2}/${DATETIME:4:4} at ${DATETIME:9}'" > /home/roman/.micq/scripting)
#Сохраняем файл, перезагружаем конфиги Asterisk’a
[[email protected] micq-0.5.0.4]# su -
Password:
[[email protected] ~]# asterisk -r
pbx1*CLI> extensions reload
---bla-bla-bla---
pbx1*CLI> exit
[[email protected] ~]# exit
[[email protected] micq-0.5.0.4]#

Все.
___________________________________________
# Дополнение от 19.07.2005г.
# Бот падает в оффлайн, если превышен некоторый лимит количества сообщений за единицу времени.
Слава Богу, обычно он сам поднимается после этого.
___________________________________________
___________________________________________
# Дополнение от 20.07.2005г.
# Дополнение к дополнению от 19.07.2005 🙂
Можно с некоторой периодичностью, например используя cron, скриптом давать боту комманду login.
___________________________________________
___________________________________________
# Дополнение от 16.03.2006г.
# Версия mICQ 0.5.0.4 с русским работала некорректно. Уже следующая работала отлично. На настоящий момент используйте версию 0.5.1.
http://www.micq.org/source/micq-0.5.1.tgz

# Про login
Добавьте в /etc/crontab
*/30 * * * * root echo "login" > /home/roman/.micq/scripting

# Про «зомбиков»
Если процесс micq умирает по какой-то причине (например кто-то сделал killall SCREEN), то в системе появляются подвисшие процессы ‘echo’, звонок не завершается нормальным образом.
Хак:
#!/bin/bash

# for pid in $(ps aux | grep "micq" | grep "scripting" | grep -v grep | awk '{print $2}'); do
for pid in $(ps aux | grep -v grep | awk '/micq|scripting/ {print $2}'); do
echo "Killing micq with PID $pid:"
kill -9 $pid
done
exit

# Дополнение от 02.08.2006г.
Автозапуск micq под пользователем roman.
Прописывается например в /etc/rc.d/rc.local
/bin/su — roman -c «/usr/bin/screen -d -m /usr/bin/micq»

http://asteriskforum.ru/viewtopic.php?p=1127

http://romik-g.livejournal.com/3690.html