Я пытаюсь сделать скрипт для автоматизации туннелирования ssh на Ubuntu 13.04 64 бит. Он основан на примере ssh_tunnel из модуля Pexpect (http://www.noah.org/wiki/pexpect#ssh_tunnel.py)
Но есть проблема с запуском кода на моей машине. Я хотел проверить, есть ли какие-либо активные, несуществующие ssh-туннели, которые уже работают. Если я проверю это в терминале, я получу ssh-agent и ssh:
user@comp$ ps -e|grep ssh
3578 ? 00:00:00 ssh-agent
9686 pts/0 00:10:31 ssh <defunct>
10955 pts/0 00:00:02 ssh
Поэтому я попытался отфильтровать результаты, используя опцию -v (инвертировать выбор) grep, я могу получить активные туннели. Это позволит мне определить, нужно ли мне открывать новый туннель:
user@comp$ ps -e|grep ssh|grep -v agent|grep -v def
10995 pts/0 00:00:00 ssh
К сожалению, если я вызову указанную выше команду с помощью pexpect.spawn, а затем сделаю ожидание следующим образом:
ps = pexpect.spawn ('ps -e|grep ssh | grep -v agent | grep -v def')
res1 = ps.expect (['ssh', pexpect.EOF, pexpect.TIMEOUT])
res1 возвращает значение 1, что указывает на pexpect.EOF (процесс ssh не найден)
Что я здесь делаю неправильно? В противном случае, есть ли другой способ проверить, запущен ли уже ssh, чтобы я не открывал другой