Про screen - 2

Feb 19, 2020 10:47

Общими усилиями в предыдущей дискуссии мы нашли решение, которое меня более-менее устраивает.

Удалось добиться следующего:

1. При входе по ssh автоматически запускается screen. Вернее, подцепляется старый если он есть или запускается новый, если нет.
2. При открытии окна терминала в сессии LXDE наиболее привычным для меня способом, это окно тоже подцепляется к существующему screen (открывая внутри него новое окно). Чтобы получить чистый xterminal без screen нужно сделать на пару кликов мышкой больше.

Соответсвенно, при обрыве связи, падении X-сервера или необходимости выйти из X-сессии, процессы запущенные в терминалах продолжают работать.

При этом в screen доступен ssh-agent последней начавшейся сессии (GUI-шной или ssh-ной).
Заморачиваться и делать стэк сессий. чтобы если последнюю сессию закрыли раньше предпоследней, ssh-агент от предпоследней продолжал работать, я не стал.

Недостатки у получившегося решения следующие:

1. Не работает полоса прокрутки у LXTerminal. Прокручивать вывод приходится средствами screen.
2. Если у нас много машин с таким сетапом и мы постоянно ходим с одной через другую на третью, то
придется долго думать сколько букв a нажимать между Ctrl-A и d. Все усложняется тем, что у меня есть несколько машин, на которых я могу сидеть в сессии LXDE за локальным экраном, и на все из этих машин я могу зайти по ssh из сессии на другой машине.
3. Распихивать эту конструкцию по пяти десяткам виртуалок и контейнеров - лень. Может и правда собраться и сделать там bind-mounted ${HOME}?
4. И совсем уж засада если есть машины куда несколько человек ходит одним и тем же пользователем.
beldmit, помнишь казахскую HP/UX с "Warning, you are igus" в /etc/issue?

Делается это так:

1. В .profile (для входа по ssh) и в .xsessionrc (для lxde) если определена переменная SSH_AUTH_SOCK, делается симлинк с этого сокета на сокет с фиксированным именем. (если у вас ${HOME} используется на нескольких машинах, то либо включайте в это имя $(hostname), либо выбирайте его в /tmp или /run)
2. Переменная переустанавливается, чтобы показывала на это фиксированное имя.
3. Последней строчкой в .profile пишется exec screen -xRR
4. Шорткат в GUI-сессии, через который чаще всего открывается окно терминала, переопределяется так чтобы сразу запускал в этом терминале screen -x -p +

security implications у этого, как мне кажеется, минимальные. Если кто-то может читать аутентификационный сокет ssh-agent, то этот кто-то с тем же самом успехом прочитает /proc/*/environ и найдет там значение SSH_AUTH_SOCK для нужного ему пользователя.

Конечно, если у нас NFS-mounted ${HOME} (у меня таких, к счастью, нет), то придется либо создавать симлинк на сокет за пределами ${HOME}, в /tmp или /run, либо вписывать в его имя $(hostname).

This entry was originally posted at https://vitus-wagner.dreamwidth.org/2140734.html. Please comment there using OpenID. Now there are
comments

компьютерное, open source

Previous post Next post
Up