расшаривание терминала


Частенько нам приходится делиться компьютерным опытом с другими людьми или просто показывать им свою работу. Зачастую, для этого требуется удаленно предоставить им доступ к своему экрану. В этой статье я расскажу как предоставить доступ только для чтения к своей консоли/терминалу с помощью screen. Статья актуальна для Linux/BSD систем.

Для начала, убедимся, что у нас установлен screen и sshd. Установив эти программы и запустив сервис ssh, приступим к настройке.

 Выставим необходимые права на бинарник sreen и на папку с сессиями.

sudo chmod +s /usr/bin/screen
sudo chmod 755 /var/run/screen

Добавим специального «бесправного» пользователя в систему. Для этого изменим ему стандартный шелл.

ln -sf bash /bin/rbash
useradd -m -s /bin/rbash guest

Пароль у него будет просто перевод каретки. Т.к. команда passwd нам этого не позволит, изменим вручную файл /etc/shadow.

vi /etc/shadow

и вместо пароля введем вот это, получено с помощью команды openssl

openssl passwd -1 -salt ADUODeAy
$1$ADUODeAy$eCJ1lPSxhSGmSvrmWxjLC1

Проверим файл настроек sshd /etc/ssh/sshd_config. Разрешим пустые пароли и вход нашему пользвателю.

PermitEmptyPasswords yes
AllowUsers guest

Не забываем перезапустить ssh

service ssh reload

Либо вообще закомментируем строку AllowUsers, разрешив вход всем пользователям в системе.

Настроим screenrc для этого пользователя.

SCREENRC=$HOME/.screenrc
export SCREENRC
echo 'SCREENRC=$HOME/.screenrc' >> ~guest/.bashrc

Vbell off — отключает звонок, который отображается как мигание экрана.

aclchg guest -wx «#,?» — изменяет права нашего пользователя, запрещая ему выполнять команды.

multiuser on — позволяет множественный вход.

aclchg guest +x «colon,wall,detach» — разрешает пользователю выходить, переписываться с другими.

echo '
vbell off
aclchg guest -wx "#,?"
aclumask guest-wx
aclchg guest +x "colon,wall,detach"
multiuser on' >> ~/.screenrc

Делаем так, чтобы при соединении, наш пользователь видел приглашение и сразу же попадал в screen.

Обратите внимание, на эту строку: screen -x insider/shared-session. insider — пользователь, который предоставляет доступ к своему экрану, т.е. который запустит screen.

echo '
trap "" 2 3 19 #try to stop user getting to shell
clear
echo "Welcome to the Python Class!"
echo "You can enter Ctrl-ad to detach at any time or just close your terminal"
echo "You can message all users by doing, Ctrl-a: wall \"your message\""
echo -n "Press Enter to continue..." && read
screen -x insider/shared-session
exit' > ~guest/.profile
echo '. .profile' >> ~guest/.bash_profile

Стартуем screen из того терминала, который мы хотим расшарить в будущем.

screen -S shared-session

Теперь, чтоб поключиться к нему в режиме view-only, достаточно всего лишь набрать

ssh guest@host

Что же в итоге мы получим? Подключившись к нашему терминалу, удаленный пользователь сможет только наблюдать за нашими действиями, но никак не помешать нашей работе, в случае необходимости, мы можем разрешить ему выполнять команды. Эта технология позволяет значительно экономить трафик по сравнению с vnc, rdp, Radmin, TeamViewer и т.п., нативна для Linux, безопасна, т.к. весь SSH трафик шифруется, гибкая в настройке, позволяя очень тонко сконфигурировать вашу систему «шаринга» экрана, очень проста для конечного пользователя, вздумавшего понаблюдать за вашим экраном-терминалом: ему не нужно ставить никакой софт, настраивать его и т.п., все настройки выполняются со стороны сервера — того кто делится экраном. Поэтому, я считаю это лучшим вариантом для расшаривания экрана терминала.

P.S. можно изменить настройки screen глобально, добавив нужные нам опции в /etc/screenrc, как я и сделал.

aclchg guest -wx "\#,?"
aclchg guest +x "colon,wall,detach"
comments powered by Disqus