0

SFTP を使用していくつかのファイルをアップロードする必要があります。これはコマンド ラインから機能します。

$sftp myuser@my_remote_host
Connected to my_remote_host
sftp>

これは私の Paramiko スクリプトです。

#!/usr/bin/env python
import paramiko
import sys
import os

host = "my_remote_host"
port = 22

transport = paramiko.Transport((host, port))

username = "myuser"      

LOCAL_PATH = "/tmp/"
REMOTE_PATH = "/dcs/tmp/"
FILE = "myfile"

transport.connect(username = username)

sftp = paramiko.SFTPClient.from_transport(transport)
path = LOCAL_PATH + FILE
sftp.put(LOCAL_PATH + FILE, REMOTE_PATH + FILE)

sftp.close()
transport.close()
print 'Upload done.'

実行すると、次のエラーが発生します。

No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
  File "./my_sftp.py", line 19, in ?
    sftp = paramiko.SFTPClient.from_transport(transport)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 102, in from_transport
    chan = t.open_session()
  File "/usr/lib/python2.4/site-packages/paramiko/transport.py", line 655, in open_session
    return self.open_channel('session')
  File "/usr/lib/python2.4/site-packages/paramiko/transport.py", line 745, in open_channel
    raise e
EOFError

秘密鍵を追加すると、次のエラーが発生します。

path = os.path.join(os.environ['HOME'], '.ssh', 'id_dsa')
key = paramiko.DSSKey.from_private_key_file(path)
transport.connect(username = username, pkey=key)

Traceback (most recent call last):
  File "./my_sftp.py", line 24, in ?
    transport.connect(username = username, pkey=key)
  File "/usr/lib/python2.4/site-packages/paramiko/transport.py", line 1007, in connect
    self.auth_publickey(username, pkey)
  File "/usr/lib/python2.4/site-packages/paramiko/transport.py", line 1234, in auth_publickey
    return self.auth_handler.wait_for_response(my_event)
  File "/usr/lib/python2.4/site-packages/paramiko/auth_handler.py", line 174, in wait_for_response
    raise e
paramiko.AuthenticationException: Authentication failed.
4

1 に答える 1

2

最初の例では、ユーザー名だけでは認証できないため、セッションを開始できません。

もう少し情報がないと、あなたの秘密鍵の例が機能しない理由がわかりません。そのサーバーのキーが正しくない可能性はありますか? コマンド ラインの SSH は、複数のキーを試行しているか、エージェントから取得している可能性があります。

とにかく、SSHClientクラスから始める方が簡単です。すべての認証とホスト検証の要素が 1 つのパッケージにまとめられます。open_sftp()インスタンスを返す便利なメソッドもありSFTPClientます。

于 2010-11-18T16:37:51.640 に答える