Вопрос выражения клавиатуры, аналогичный (echo -ne '\ 015')

Если кому-то еще интересен ответ...

Кажется, что способ достичь этого - это пересылаемый билет kerberos. Затем билет можно переслать с помощью gssapi, а на стороне сервера этот билет можно использовать с помощью команды ksu в вопросе, чтобы породить процесс от имени указанного пользователя.

ksu kerbuser -c "/bin/bash authed-process.py"

Эта команда будет искать в кэше пользователя билет kerberos, а затем запускать процесс. Однако клиент-серверный gssapi должен быть привилегированным, поскольку только привилегированные (root) пользователи могут просматривать файл keytab.

0
10.10.2018, 19:18
3 ответа

Насколько мне известно, не существует команды, которую можно выполнить в оболочке внутри сеанса screenдля отключения терминала от этого сеанса. screenпросматривает только ввод с вашего терминала для магического метасимвола(Ctrl-a ), а не что-либо, отображаемое в сеансе терминала, управляемом самимscreen. Для демонстрации я создал файл с именем detachsequence, который содержит Ctrl-символ , за которым следует символ d:

.
$ hexdump detachsequence
0000000 01 64

Если я catсделаю это внутри screenсеанса, ничего (примечательного )не произойдет; файл будет просто отображаться (, несмотря на невидимый управляющий символ):

$ cat detachsequence
d

echoили printfтакже ничем не примечательны.

На самом деле, было бы особенно серьезным недостатком безопасности, если бы catting файл внутри screenмог отправлять управляющие последовательности самому screen.

1
28.01.2020, 02:31

Нажатия клавиши Ctrl-<letter>отправляют коды символов от 1 до 26 для букв от Aдо Z. То есть Ctrl -A или ^Aотправляет символ 1, или \x01или \001, ^B— 2 и т. д. Возврат каретки — \015или 13 (десятичное )или ^M.

Итак, Ctrl-A dбудет \001d.

Однако, если вы хотите отправить эту последовательность так, как ее screenинтерпретирует, это не так просто сделать изнутри самого экрана. (Вы можете сделать это с терминала за пределами из screen.)

Более простой способ попросить screenотсоединиться от сценария — запустить screen -X detach, возможно, также используя -S, чтобы указать, какой экран вы хотите отсоединить, и используя переменную среды STY, чтобы найти идентификатор текущий экран.

0
28.01.2020, 02:31

Универсальным решением может быть:

screen -d $STY

Screen передаст имя сеанса в переменную $STY, после чего вы сможете использовать с ней screen -d.

Вероятно, вы захотите запустить команду в автономном режиме, это можно сделать следующим образом:

screen -d $STY & yourcommand

Примечание:screen -dсамо по себе достаточно. Вам не нужно указывать $STY.

Вы также можете запустить сценарий, который изначально отсоединен:

screen -d -m /the/script

Но это будет иметь оговорку, что у вас не будет временных рамок, в течение которых вы можете взаимодействовать со сценарием, пока он не будет отсоединен. Если вам это нужно, предыдущее решение должно быть подходящим.

Другое решение (, которое зависит от среды):

Если вы используете скрипт на виртуальном терминале в сеансе X, вы можете использовать xdotoolдля отправки управляющей последовательности на терминал:

xdotool key control+a+d
1
28.01.2020, 02:31

Теги

Похожие вопросы