2013-08-04 2 views
0

Я пишу скрипт для автоматического обновления всех локальных ключей автозапуска SSH. Следующий скрипт запускается, если один из моих компьютеров еще не имеет исходных файлов SSH (и я также хочу поделиться им с GitHub после некоторого тестирования);Сопоставьте запрос процесса и ответьте программно

ssh-keygen -t rsa 

.. и поэтому я получаю подсказки;

  • Введите файл, в котором для сохранения ключа (/Users/allendar/.ssh/id_rsa):
  • Введите ключевую фразу (пусто без всякой ключевой фразы):
  • Введите ту же фразу еще раз:

То же самое относится к динамическому добавлению всех ключей доступа в команде ssh-copy-id.

В основном я использую только os библиотеки, но я читал онлайн, я должен использовать что-то вроде subprocessPopen.

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

Так что если бы я открыл подпроцесс ssh-keygen -t rsa, и он спрашивает Enter same passphrase again: Я мог бы поймать (прочитать), что он просит, и отправить ответ ComplexPassword.

ответ

1

Вместо этого использовать pexpect.

import pexpect 

kg = pexpect.spawn('ssh-keygen -t rsa') 
kg.expect('Enter same passphrase again:') 
+0

Спасибо, Martijn, отлично работает. Является ли 'ожидать' читать вставленную строку как регулярное выражение по умолчанию или просто wilcards, как'. * '? –

+0

Ожидание принимает строку или регулярное выражение. См. [Сгенерированная документация] (http://pexpect.sourceforge.net/pexpect.html). –

+0

Чтобы быть точным, это займет строки или скомпилированные объекты регулярных выражений, и он скомпилирует строки в регулярные выражения. – Alp

Смежные вопросы