Команда запуска Python Fabric возвращает binascii.Error: неправильное заполнение

Я пытаюсь подключиться к Amazon EC2 через ткань, используя приведенный ниже сценарий. Но столкнулся с проблемой, которую не знаю как решить.

import os
from fabric.api import run, env, local, cd

WORK = os.getenv('HOME') + '/Work/myproject/'

env.user = 'ubuntu'
env.hosts = [
    '128.248.268.288'
]
env.key_filename = [
    '%s/aws/myproject.pem' % WORK
]

def deploy():
    print("Executing on %(host)s as %(user)s" % env)
    with cd('/sites/myproject.com/code/'):
        run('ls')

Это трассировка. Я не уверен, как решить проблему.

Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/fabric/main.py", line 540, in main
    commands[name](*args, **kwargs)
  File "/Users/mickeyckm/Work/myproject/codes/giivee/fabfile.py", line 18, in deploy
    run('ls')
  File "/Library/Python/2.6/site-packages/fabric/network.py", line 391, in host_prompting_wrapper
    return func(*args, **kwargs)
  File "/Library/Python/2.6/site-packages/fabric/operations.py", line 422, in run
    channel = connections[env.host_string]._transport.open_session()
  File "/Library/Python/2.6/site-packages/fabric/network.py", line 65, in __getitem__
    self[real_key] = connect(user, host, port)
  File "/Library/Python/2.6/site-packages/fabric/network.py", line 140, in connect
    client.load_system_host_keys()
  File "/Library/Python/2.6/site-packages/paramiko/client.py", line 151, in load_system_host_keys
    self._system_host_keys.load(filename)
  File "/Library/Python/2.6/site-packages/paramiko/hostkeys.py", line 155, in load
    e = HostKeyEntry.from_line(line)
  File "/Library/Python/2.6/site-packages/paramiko/hostkeys.py", line 67, in from_line
    key = RSAKey(data=base64.decodestring(key))
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/base64.py", line 321, in decodestring
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding

Любая помощь/подсказка будет принята с благодарностью.

Привет, Микки


person Mickey Cheong    schedule 21.02.2011    source источник
comment
/Users/mickeyckm/Work/myproject//aws/myproject.pem ссылается на файл? Это действительно файл PEM? (Требуются ли для paramiko ключи ssh или PEM? rsa или dsa?) Библиотека истерит из-за двойного // в имени файла? (Надеюсь, что нет, но кто знает.)   -  person sarnold    schedule 21.02.2011
comment
Я исправил //, будет та же проблема. любая помощь?   -  person Mickey Cheong    schedule 21.02.2011


Ответы (3)


Я видел несколько мест, где ошибка Incorrect Padding была вызвана модулем binascii, и в основном это было, когда строка, которую вы передаете, содержит посторонние символы пробела.

>>> import binascii
>>> binascii.a2b_base64('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
binascii.Error: Incorrect padding

В вашем случае это различные свойства, которые вы установили для своего объекта env. Сделайте что-то подобное для местоположения файла ключа и посмотрите, сработает ли это.

filelocation = os.path.join(WORK,'aws/myproject.pem')
env.key_filename = [filelocation]
person Senthil Kumaran    schedule 21.02.2011
comment
привет, Сентил, я последовал твоему совету, я попытался запустить binascii.a2b_base64() в файле. Сначала это не работало. Поэтому я исправил это. Однако я все еще получаю ту же ошибку, когда дело доходит до команды run(). - person Mickey Cheong; 21.02.2011
comment
привет, Сентхил, я понял одну вещь, filelocation = os.path.join(WORK,'aws') будет работать, но когда я попытался сделать это, filelocation = os.path.join(WORK,'aws/myproject.pem') , binascii, он вернет ошибку. как-то .pem имеет значение - person Mickey Cheong; 21.02.2011
comment
@Mickey, попробуйте отправить filelocation.strip() явно и посмотрите, не возникнет ли у вас проблема? - person Senthil Kumaran; 21.02.2011
comment
пробовал так, тоже не работает. Я даже дошел до того, что переименовал его в «mickeyckm» вместо «mickeyckm.pem». Он передал binascii.a2b_base64 (расположение файла), но не работает, когда я запускаю команду запуска. - person Mickey Cheong; 21.02.2011
comment
Спасибо за помощь, на самом деле я понял, что файл known_hosts был поврежден. Я удалил поврежденную запись, и она работает. - person Mickey Cheong; 22.02.2011

Посмотрите на свой файл ~/.ssh/known_hosts. Он может содержать строки с повторяющимися записями или быть испорченным каким-либо другим образом.

person Robert Kajic    schedule 29.08.2011

У меня была похожая проблема, и я отследил ее из-за повреждения в моем файле .ssh/known_hosts.

Таким образом, я добавил в свой .bashrc

alias deploy='mv ~/.ssh/known_hosts ~/.ssh/known_hosts.tmp; fab <myfabscript>; mv ~/.ssh/known_hosts.old ~/.ssh/known_hosts'

(очевидно, поместив правильный скрипт ткани там, где <myfabscript>), и теперь все работает нормально, когда я просто запускаю «развернуть»!

person rolandw    schedule 27.03.2012