Pexpect.spawn ssh and cron (Солярис)
У меня проблемы с использованием cron для запуска сценария pexpect на Solaris 10, который будет подключаться к ssh другим устройствам. Устройства, к которым я подключаюсь, являются сетевыми элементами, которые будут принимать ssh-соединения, используя user/pass (но я не могу перенастроить их).
У меня есть этот скрипт, который отлично работает, когда я запускаю из оболочки входа в систему, но он не работает при запуске из cron. Я прочитал сообщения о настройке env для имитации интерактивной оболочки, но безрезультатно. Любая помощь высоко ценится. Я ограничен использованием Python 2.6, pexpect, Solaris 10.
Сценарий: /path_to/try.py
#!/usr/bin/env python
import pexpect
import traceback
import os, sys, time, re
from time import sleep
host='10.0.0.58'
user='myuser'
password='password'
child=pexpect.spawn("/usr/bin/ssh -l %s %s" % (user, host))
i = child.expect([pexpect.EOF, pexpect.TIMEOUT, "password: "])
if i == 0:
print "EOF ERROR SSH could not login %s . Here is what SSH said:"% (host)
print child.before, child.after
if i == 1: # Timeout
print "TIMEOUT ERROR SSH could not login. Here is what SSH said:" % (host)
print child.before, child.after
if i == 2:
child.sendline(password)
print "Got device password prompt"
print "finally"
exit;
crontab это:
42 * * * * PATH=$PATH:/usr/local/bin && bash -lc "/path_to/try.py"
Результат из скрипта через cron т.е.
EOF ERROR SSH could not login 10.0.0.58 . Here is what SSH said:
<class 'pexpect.EOF'>
<pexpect.spawn object at 0x8ed30>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', 'myuser', '10.0.0.58']
searcher: searcher_re:
0: EOF
1: TIMEOUT
2: re.compile("password: ")
buffer (last 100 chars):
before (last 100 chars):
after: <class 'pexpect.EOF'>
match: <class 'pexpect.EOF'>
match_index: 0
exitstatus: None
flag_eof: True
pid: 18189
child_fd: 3
closed: False
timeout: 300
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
finally
1 ответ
Я нашел решение, которое состояло в том, чтобы обновить pexpect с 2.3 до 4.1 (и установить его зависимость ptyprocess-0.5.1).