私は、複数のファイルをアプリケーション経由でサーバーにアップロードするためのスクリプトの作成に取り組んでいます。ユーザーは複数のファイルを選択することができ、そのすべては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の最新バージョン、古いバージョン、まったく別のライブラリを使用することによって)私は大いに感謝します。
まず、ホスト鍵を確認する必要があります。それを避けようとしないでください! https://stackoverflow.com/a/43389508/850848 –
例外コールスタックとは何ですか?どんな声明が例外をスローしますか? –
@MartinPrikryl返事を気に入っています - 私はそのリンクを見てきましたが、known_hostsファイルに入れるために私の鍵がどこにあるのか分かりません。私はpysftpの最新バージョンを再アップデートしました。なぜなら、私がこのスクリプトを完成させたらセキュリティを必要とするからです。 –