Python Fabric 运行命令返回 "binascii.Error: 填充不正确
我正在尝试通过下面的脚本使用fabric连接到亚马逊的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
如果有人能提供帮助或提示,我会非常感激。
谢谢,
Mickey
3 个回答
0
我遇到过类似的问题,后来发现是我的 .ssh/known_hosts 文件出了点问题。
所以我在我的 .bashrc 文件里加了一些内容:
alias deploy='mv ~/.ssh/known_hosts ~/.ssh/known_hosts.tmp; fab <myfabscript>; mv ~/.ssh/known_hosts.old ~/.ssh/known_hosts'
(当然要把正确的 fabric 脚本放在 <myfabscript>
的位置)现在我只要运行 "deploy",一切就正常了!
5
看看你电脑上的 ~/.ssh/known_hosts 文件。这个文件里可能有重复的条目,或者以其他方式损坏了。
5
我看到有些地方提到“错误的填充”这个问题是由于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]