SFTP с использованием модуля pexpect python - PullRequest
1 голос
/ 05 декабря 2011

Я пытаюсь выполнить SFTP-файл с помощью модуля pexpect.

sftp_opts = ['-o', 'Port=%s' % port,
                 '-o', 'UserKnownHostsFile=%s' % known_hosts_file,
                 '-o', 'PasswordAuthentication=yes',
                 '%s@%s' % (user, host)]
    p = pexpect.spawn('sftp', sftp_opts)

    try:
      p.expect('(?i)password:')
      x = p.sendline(password)
      x = p.expect('sftp>')
      x = p.sendline('cd ' + remote_dir)
      x = p.expect('sftp>')
      x = p.sendline('put ' + filename)
      x = p.expect('sftp>')
      x = p.isalive()
      x = p.close()
      retval = p.exitstatus
    except pexpect.EOF:
      print('SFTP file transfer failed due to premature end of file.')
      return False
    except pexpect.TIMEOUT:
      print('SFTP file transfer failed due to timeout.')
      return False

Похоже, я могу подключиться и получить аутентификацию через SSH, но ответ всегда равен 1 (состояние выхода) ифайл не получает sftp.

Я что-то здесь упускаю?

Если я попытаюсь дождаться p (p.wait () вместо p.close ()) - оно никогда не вернется.

1 Ответ

1 голос
/ 20 сентября 2012

Подводя итог как ответ:

  • включите ведение журнала отладки, чтобы лучше понять, что происходит не так;от David K. Hess

  • Используйте pexpect, но автоматизируйте scp вместо sftp;еще лучше использовать ssh-ключи;из jornam

  • использовать функцию sftp из paramiko ssh lib;из эпимафа

...