Если сеанс screen запущен с правами root, вы можете это сделать, но это не будет абсолютно надежно
Если два пользователя вводят текст в одно и то же экранное окно, они оба будут взаимодействовать в одной и той же оболочке. Можно написать команду. Другой может нажать клавишу <enter>
.
Вы должны получить доступ к переменной среды SSH_CONNECTION
(или лучше SSH_CLIENT
), что возможно только в том случае, если вы являетесь пользователем root или если вы используете одного и того же пользователя внутри сеанса экрана.
Предположим, что вы являетесь пользователем root в сеансе экрана, вы можете узнать последнего пользователя, активного в сеансе экрана, используя команду ps
и найдя последний активный сеанс.
ps h -C screen katime -o pid,user
Используя pid и получив доступ к файлу /proc/<pid>/environ
, вы можете получить переменную SSH_CLIENT
.
sed -z '/SSH_CLIENT/p;d' /proc/`ps h -C screen katime -o pid |head -1`/environ
--> SSH_CLIENT=257.31.120.12
Все это предполагает, что ваш экран выполняется как root
Вы также можете зарегистрировать все активные соединения. Для такой необходимости я бы предложил вам хранить как полный список подключений, так и их последнюю активность.
ps eh -C screen kstime -o pid,atime | while read pid stime; do echo -n "$stime: ";\
gawk -v 'RS=\0' -F= '$1=="SSH_CLIENT" {print $2}' /proc/$pid/environ; done
Result:
00:00:00: 257.31.120.12 61608 22
00:07:11: 258.1.2.3.4 49947 22
Обратите внимание, что вы также можете проанализировать результат команды ps eh -C screen kstime -o args
, если вам так проще.
ИЗМЕНИТЬ:
Это рабочая команда Debian для подключения всех пользователей к одному и тому же экранному сеансу:
find /var/run/screen/
-name $(pstree -sp $$ |sed 's/.*screen(\([0-9]*\)).*/\1/;q').*
-printf "%h\n"
| cut -f2 -d-
person
Adam
schedule
09.06.2016
/proc
). - person n. 1.8e9-where's-my-share m.   schedule 29.05.2016l
другойs
и еще один нажал Enter, кто вызвалls
? То же самое и сscreen
. - person n. 1.8e9-where's-my-share m.   schedule 30.05.2016