"ошибка: синтаксическая ошибка списка идентификаторов процессов"

Предположим, вам нужен сценарий, который будет отправлять пароль на удаленный компьютер при входе в систему через ssh, вот небольшой код Python, который не требует дополнительных библиотек и т. Д. Очевидно, это всего лишь пример того, что возможно только при использовании os forkpty execlp для чтения и записи.

#!/usr/bin/python
# simplest builtin python pseudo-tty for ssh password. meuh 
# http://unix.stackexchange.com/a/276385/119298
import os
def run(cmd,*args):
    pid, fd = os.forkpty()
    if pid==0: # child
        os.execlp(cmd,*args)
    while True:
        data = os.read(fd,1024)
        print data
        if "password:" in data:    # ssh prompt
            os.write(fd,"mypassword\n")
        elif data.endswith("$ "):  # bash prompt for input
            os.write(fd,"echo hello\n")
            os.write(fd,"echo bye\n")
            os.write(fd,"exit\n")

run("ssh", "ssh", "user@remote")

Обратите внимание, что вам нужно указать ssh дважды, один раз для argv [0].

0
21.08.2018, 22:04
1 ответ
% echo <(echo "ls; pwd; a=7")
/proc/self/fd/11
% bash
$ echo <(echo "ls; pwd; a=7")
/dev/fd/63

поэтому форма <(...)на самом деле является путем к дескриптору файла, характерному для оболочки, который может быть недоступен для других процессов; в частности bashна самом деле труба:

$ function hmm() { ls -al $1; }
$ hmm <(echo pwd)
lr-x------ 1 jhqdoe jhqdoe 64 Aug 21 14:58 /dev/fd/63 -> pipe:[910134]

sudoпо соображениям безопасности старается закрыть все эти дескрипторы файлов по умолчанию (см. --close-fromдокументацию по опциям вsudo(8)). Возможно, вы сможете прокрутить один из этих файловых дескрипторов через (, если это разрешено политикой безопасности, и вы согласны с риском )через closefrom_override, а затем, возможно, и --close-from.

Другим методом может быть использование expect, а затем передача данных пользователю после выполнения некоторых команд:

#!/usr/bin/env expect
spawn -noecho bash
expect -ex {$}
send "pwd\r"
expect -ex {$}
interact
1
28.04.2021, 23:43

Теги

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