Невозможно написать скрипт для "svn export" в Python - PullRequest
0 голосов
/ 12 ноября 2009

Я хотел бы написать скрипт, который скажет другому серверу SVN экспортировать SVN-репозиторий.

Это мой скрипт на python:

import os

# svn export to crawlers
for s in ['work1.main','work2.main']:
    cmd = 'ssh %s "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"' % s
    print cmd
    os.system(cmd)

Очень просто. Он перейдет по ssh в work1.main, затем перейдет в правильный каталог. Затем вызовите команду экспорта SVN.

Однако, когда я запускаю этот скрипт ...

$ python export_to_crawlers.py
ssh work1.main "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
svn: Connection closed unexpectedly
ssh work2.main "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"
Host key verification failed.
svn: Connection closed unexpectedly

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

Если я перейду на это ... это не сработает. и вместо этого ничего не произойдет.

cmd = 'ssh %s "cd /home/zes/ ;"' % s

Ответы [ 3 ]

2 голосов
/ 12 ноября 2009

Это проблема с SSH.

В доступе отказано, повторите попытку.

Это означает, что ssh не может войти в систему. Либо у вашего агента ssh не загружен правильный ключ, либо вы запускаете сценарий от имени другого пользователя, либо среда не передается правильно. Убедитесь, что переменные SSH_AUTH_SOCK и SSH_AGENT_PID переданы в подпроцесс вашего скрипта Python.

Ошибка проверки ключа хоста.

Эта ошибка означает, что удаленный хост не известен ssh. Это означает, что ключ хоста не найден в файле $HOME/.ssh/known_hosts. Опять же, убедитесь, что вы проверяете домашний каталог эффективного пользователя скрипта.

[EDIT] Когда вы запускаете скрипт, тогда python станет «входом» ssh: ssh больше не подключается к консоли и будет запрашивать у python пароль для входа в систему. Поскольку python не знает, чего хочет ssh, он игнорирует запрос. ssh пытается трижды и умирает.

Чтобы решить эту проблему, выполните следующие команды перед запуском скрипта Python:

eval $(ssh-agent)
ssh-add path-to-your-private-key

Замените path-to-your-private-key на путь к вашему личному ключу (тот, который вы используете для входа в систему). ssh-add запросит ваш пароль, и ssh-agent сохранит его в безопасном месте. Это также изменит вашу среду. Поэтому, когда SSH запустится в следующий раз, он заметит, что запущен агент ssh, и сначала спросит об этом. Поскольку ssh-agent знает пароль, ssh будет входить в систему, не беспокоясь о Python.

Чтобы решить вторую проблему, выполните вторую команду ssh вручную один раз. Затем ssh добавит второй хост в свои файлы и больше не будет спрашивать.

[EDIT2] См. это руководство для подробного объяснения того, как войти на удаленный сервер через ssh с вашим закрытым ключом.

0 голосов
/ 14 ноября 2009

Проверьте модуль pxssh, который является частью проекта pyexpect:

https://pexpect.readthedocs.org/en/latest/api/pxssh.html

Упрощает работу с автоматизацией SSH-машин.

0 голосов
/ 12 ноября 2009

Я думаю, это связано с SSH. Используете ли вы открытый ключ для автоматического подключения. Я думаю, что ваша оболочка знает этот ключ, но это не относится к python.

Я не уверен, но это всего лишь идея. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...