пятница, 13 июля 2012 г.

"Хозяйке на заметку" - Работаем вдвоем на одной консоли (шелл).Подводные камни при работе с ssh



Иногда в практике админа возникает необходимость проконтролировать, а что и как, собственно, делает пользователь и/или младший админ на консоли. Например, в процессе показа и обучения пользования ОС или какими-то ее особенностями. В частности, не так давно мне нужно было обучить junior админа некоторым небольшим фокусам в linux. Ну хорошо, если они (админ и обучаемый) сидят в одной комнате или хотя бы живут в одном городе. А если на разных континентах?

Очень удобно в таких случаях работать одновременно на одной консоли. Казалось бы - достаточно расшарить экран хотя бы по тому же скайпу. Но как быть, если учителю нужно набрать пару команд и показать результат и действия? Пользоваться платными сервисами для создания вебконференций? "Шурик, это же не наш метод!" (с) :) Все гораздо проще.

Есть великолепная программка screen. Одной из ее возможностей и есть то, что нам нужно.

Сначала ученик создает сессию screen:

$ screen -S mysession


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

Далее учитель подключается к сессии:

$ screen -x mysession


Все, имеем готовую "консоль на двоих". Оба оператора консоли могут видеть содержимое и работать с консолью.

Но не все так безоблачно. Ведь не может же ОС допустить, чтобы кто ни попадя мог так просто вломиться в чужую консоль. Поэтому важным условием должно быть - запуск screen от имени одного пользователя: как учеником так и учителем!

Казалось бы - в чем проблема? Учитель, используя команду sudo, переключается на нужного пользователя и подключается к нужной сессии. А проблема в ssh, который в 99% случаев будет использован (как правило, "коллективные сеансы" screen проводятся на некоем третьем компьютере, удаленном сервере). Владелец псевдотерминала, созданного ssh, при sudo не меняется (что, разумеется, абсолютно правильно и логично) и screen не может к нему приаттачиться!, выдавая сообщение вида:

$ screen -x testsession
Cannot open your terminal '/dev/pts/14' - please check.


Менять права по умолчанию для псевдотерминала? Это все равно, что отдать "ключи от квартиры, где деньги лежат" (с) - т.е. добровольно снизить безопасность системы до неприемлемого уровня.

Но есть некий обход, "dirtyhack". Нужно воспользоваться командой script, которая предназначена, вообще-то несколько для других целей, но нам сгодится :)

$ script /dev/null
$ screen -x mysession


Вот теперь подключение проходит "на ура"!

PS. Не забываем, что script прекращает работу по Ctrl-D ;)

Комментариев нет:

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