2017-11-22 30 views
1

を持っていない私はGoogleのクラウドコンピューティングエンジンから私のラズベリーパイにファイルを取得したいのですが、私は次のエラーを取得する:しはAttributeError:「str」はオブジェクトが属性「public_blob」

File "/usr/local/lib/python2.7/dist-packages/paramiko/auth_handler.py", line 212, in wait_for_response 
raise e 
AttributeError: 'str' object has no attribute 'public_blob' 

何このエラーメッセージの意味ですか?

ありがとうございます!

のpythonファイル:

import paramiko 

hostname = '43.123.231.212' 
password = 'passw' 
username = 'dosop' 
port = 22 

gc_path='/home/do//assets/locations.txt' 
remotepath='/home/pi/ada.txt' 

t = paramiko.Transport((hostname, 22)) 
t.connect(username=username, password=password, pkey="/home/pi/dos/priv_key" 
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.get(gc_path, remotepath) 
+0

認証しようとすると、基本的に失敗します。パスまたはプライベートキーが間違っている必要があります。 – user1767754

+0

クイック返信ありがとうございます。私は秘密鍵をどのような形式でpkey変数に渡すべきですか?文字列またはファイルとして? – Marci

+1

@Marci、 'pk = paramiko.RSAKey.from_private_key(open("/home/pi/dos/priv_key "));を試してください。 t.connect(ユーザ名=ユーザ名、パスワード=パスワード、pkey = pk) '。実際には、pkeyパラメータに渡すためにPKeyオブジェクトを作成する必要があります。 – Abdou

答えて

3

パラメータpkeyは、多くのhostkeyのように、タイプPKeyの値を期待しています。しかし、あなたはそれに文字列を提供しているようです。 paramiko.RSAKeyからオブジェクトを作成して、秘密鍵ファイルからPKeyオブジェクトを取得できます。次は役に立ちます:

import paramiko 

hostname = '43.123.231.212' 
password = 'passw' 
username = 'dosop' 
port = 22 

gc_path='/home/do//assets/locations.txt' 
remotepath='/home/pi/ada.txt' 
pk = paramiko.RSAKey.from_private_key(open('/home/pi/dos/priv_key')) 
t = paramiko.Transport((hostname, 22)) 
t.connect(username=username, password=password, pkey=pk) 
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.get(gc_path, remotepath) 

ここでは、rsaキーを使用していることを前提としています。従ってparamiko.RSAKeyの使用。私はこのことを願っています

pk = paramiko.RSAKey.from_private_key(open('/home/pi/dos/priv_key'), 'password') 

また、あなたの秘密鍵ファイルにパスワードが設定されている場合、あなたは以下のように、機能paramiko.RSAKey.from_private_keyに2番目の引数としてパスワードを入力する必要がありますのでご注意ください助けてください。

+0

それは動作します。どうもありがとうございました! – Marci

関連する問題