Я пишу скрипт для автоматического обновления всех локальных ключей автозапуска SSH. Следующий скрипт запускается, если один из моих компьютеров еще не имеет исходных файлов SSH (и я также хочу поделиться им с GitHub после некоторого тестирования);Сопоставьте запрос процесса и ответьте программно
ssh-keygen -t rsa
.. и поэтому я получаю подсказки;
- Введите файл, в котором для сохранения ключа (/Users/allendar/.ssh/id_rsa):
- Введите ключевую фразу (пусто без всякой ключевой фразы):
- Введите ту же фразу еще раз:
То же самое относится к динамическому добавлению всех ключей доступа в команде ssh-copy-id
.
В основном я использую только os
библиотеки, но я читал онлайн, я должен использовать что-то вроде subprocess
Popen
.
Есть ли способ, которым я могу поймать каждое приглашение, которое я получаю из этого подпроцесса, и, возможно, совпадаю с их вопросами с регулярным или литеральным соответствием строк, и на основании этого я мог бы отправить процесс ответа.
Так что если бы я открыл подпроцесс ssh-keygen -t rsa
, и он спрашивает Enter same passphrase again:
Я мог бы поймать (прочитать), что он просит, и отправить ответ ComplexPassword
.
Спасибо, Martijn, отлично работает. Является ли 'ожидать' читать вставленную строку как регулярное выражение по умолчанию или просто wilcards, как'. * '? –
Ожидание принимает строку или регулярное выражение. См. [Сгенерированная документация] (http://pexpect.sourceforge.net/pexpect.html). –
Чтобы быть точным, это займет строки или скомпилированные объекты регулярных выражений, и он скомпилирует строки в регулярные выражения. – Alp