2017-10-19 13 views
0

私は、複数のファイルをアプリケーション経由でサーバーにアップロードするためのスクリプトの作成に取り組んでいます。ユーザーは複数のファイルを選択することができ、そのすべてはPythonプログラムを介してサーバーにアップロードされます。私はサーバーに接続するために使用できるSFTP Pythonライブラリを探していて、pysftpを見つけました。私は、最新バージョンをダウンロードして、次のスクリプトを使用して接続しようとした: pysftpを使用してサーバーにファイルを接続してアップロードする

import tkinter.filedialog 
import pysftp as sftp 

def upload(): 
    try: 
     s = sftp.Connection(host='host',username='username',password='password',port=portnumber) 
     localpath='C:/Python/Code/example.txt' 
     remotepath='/home/example' 
     s.put(localpath,remotepath) 

     s.close 

    except Exception as e: 
     print(str(e)) 
upload() 

は、私は唯一の私はホスト鍵がなかったエラーを見つけるために、これを実行しました。私は、いくつかの研究を行なったし、あなたが追加することにより、ホスト鍵の検証の必要性をオフにすることができ判明:

cnopts = pysftp.CnOpts() 
cnopts.hostkeys = None 

をし、その後に元の行を変更:それはホストを必要としないように

s = sftp.Connection(host='hostip',username='username',password='password',port=portno, cnopts=cnopts) 

キー。これでも同じエラーが発生しました(pysftp__init__.py:61:UserWarning:HostKeysの読み込みに失敗しました)。私は、これを一時間ほど変えてから、挫折し、以前回避していた作業を試してみました。私は以前のバージョンのpysftp(pysftp == 0.2.8)にダウングレードしましたが、これはホストキー検証を必要としませんでした。私は再び、次のコードを実行しました:

import tkinter.filedialog 
import pysftp as sftp 


def upload(): 
    try: 
     s = sftp.Connection(host='hostip',username='username',password='password',port=portno) 
     localpath='C:/Python/Code/example.txt' 
     remotepath='/home/test' 
     s.put(localpath,remotepath) 

     s.close 

except Exception as e: 
    print(str(e)) 
upload() 

をのみ、次のエラーを取得する: 「失敗」を

を、私は時間のためにこれをしようとしてきました。あなたが推測してきたように、私はPythonとプログラミング全般に新しいので、どこかで初心者のエラーを作り出したかもしれません。注意事項として、Filezillaを介してSFTPを使用し、puTTY(私はちょうどホスト、ポート、ユーザー名とパスワードを使用して)を介してSSHを使用して私のサーバーに接続することができます - だから問題はありません。 pysftpの最新バージョン、古いバージョン、まったく別のライブラリを使用することによって)私は大いに感謝します。

+1

まず、ホスト鍵を確認する必要があります。それを避けようとしないでください! https://stackoverflow.com/a/43389508/850848 –

+1

例外コールスタックとは何ですか?どんな声明が例外をスローしますか? –

+0

@MartinPrikryl返事を気に入っています - 私はそのリンクを見てきましたが、known_hostsファイルに入れるために私の鍵がどこにあるのか分かりません。私はpysftpの最新バージョンを再アップデートしました。なぜなら、私がこのスクリプトを完成させたらセキュリティを必要とするからです。 –

答えて

1

pysftpはsftp操作を抽象化し単純化するための単なるラッパーです。pysftpに問題がある場合、parmikoはpysftpの依存関係であるため、parmikoを直接使用することができます。

from paramiko import SSHClient 

client = SSHClient() 
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy) 
client.connect('hostname', user='user', password='password') 
sftp = client.open_sftp() 
sftp.put(localpath, remotepath) 
+0

これを最後に使用しました、ありがとうございます! '輸入paramikoの\ nは ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(ホスト名=:誰もが将来的に同じ問題を抱えているだけの場合には私のコード'host'、port = portno、username = username、password = password) s = ssh_client.open_sftp() s.put(ローカルパス、remotepath) ' –

関連する問題