Да, это возможно, с помощью инструмента ttyecho, который может имитировать взаимодействие с пользователем в различных терминалах.
Загрузите и установите:
wget http://www.resulinux.tk/utils/ttyecho.c -O ttyecho.c
gcc ttyecho.c -o /usr/bin/ttyecho
Теперь давайте выполним что-нибудь в другом терминале, например, как пользователь john, который является loggeg в pts / 17, используя xterm, как вы видите в команде ps:
ps aux | grep john
john 9198 0.0 0.0 23836 4524 pts/17 Ss Jul21 0:00 /bin/bash
Теперь давайте попробуем открыть vi и введите текст в другой терминал.
ttyecho -n /dev/pts/17 vi (executed vi command on the other terminal)
ttyecho /dev/pts/17 i (entered in insertion mode)
ttyecho -n /dev/pts/17 some text
Когда вы посмотрите на терминал, в который вошел Джон, вы увидите, что vi действительно выполняется, и вы можете увидеть текст, который мы набираем на нем «какой-то текст». Итак, теперь у вас есть полный контроль над другими терминальными сессиями.
Выполнение команд в нескольких сеансах ssh
Определите устройства ssh pts:
ps aux | grep ssh
root 3540 0.0 0.0 44924 5764 pts/1 S+ 14:46 0:00 ssh root@172.16.200.2
root 5907 0.0 0.0 44924 5684 pts/17 S+ 12:51 0:00 ssh root@172.16.200.1
root 8074 0.0 0.0 51216 3948 pts/6 S+ Jul26 0:01 ssh root@192.168.2.77
Итак, чтобы выполнить команды на ssh, зарегистрированные в 192.168.2.77, мне просто нужно:
ttyecho -n /dev/pts/6 ls
И команда ls будет выполняться действительно удаленно в единый сценарий!