94

pysftp を使用してプログラムを作成しており、SSH ホスト キーを に対して検証したいと考えていC:\Users\JohnCalvin\.ssh\known_hostsます。

PuTTY を使用して、端末プログラムはそれを Registry に保存してい[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys]ます。

pysftp と PuTTY の違いを調整するにはどうすればよいですか?

私のコードは次のとおりです。

import pysftp as sftp

def push_file_to_server():
    s = sftp.Connection(host='138.99.99.129', username='root', password='*********')
    local_path = "testme.txt"
    remote_path = "/home/testme.txt"

    s.put(local_path, remote_path)
    s.close()

push_file_to_server()

私が受け取っているエラー応答は次のとおりです。

E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py:61: UserWarning:
C:\Users\JohnCalvin.ssh\known_hosts からホストキーを読み込めませんでした。
HostKeys (cnopts.hostkeys.load(filename)) を明示的にロードするか、HostKey チェックを無効にする (cnopts.hostkeys = None) 必要があります。warnings.warn(wmsg, UserWarning) トレースバック (最新の呼び出しが最後): ファイル "E:\OneDrive\Python\GIT\DigitalCloud\pysftp_tutorial.py"、14 行目、push_file_to_server() ファイル "E:\OneDrive\Python\ GIT\DigitalCloud\pysftp_tutorial.py"、7 行目、push_file_to_server s = sftp.Connection(host='138.99.99.129', username='root', password='********') File "E :\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py"、132 行目、 init内 self._tconnect['hostkey'] = self._cnopts.get_hostkey(host) ファイル "E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py"、71 行目、get_hostkey で SSHException("ホスト %s のホストキーが見つかりません。" % host) paramiko.ssh_exception.SSHException: ホスト 138.99.99.129 のホストキーが見つかりません。無視される例外: > トレースバック (最新の呼び出しが最後): ファイル "E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py"、1013 行目、 del self.close() ファイル "E :\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py", line 784, in close if self._sftp_live: AttributeError: 'Connection' object has no attribute '_sftp_live'

4

9 に答える 9

5

pysftp.CnOpts() およびホストキー オプションのさまざまな方法を使用するためのクック ブック。

ソース: https://pysftp.readthedocs.io/en/release_0.2.9/cookbook.html

ホスト キー チェックはデフォルトで有効になっています。デフォルトでは ~/.ssh/known_hosts を使用します。ホスト キー チェックを無効にする場合 (お勧めしません)、デフォルトの CnOpts を変更し、.hostkeys を None に設定する必要があります。

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
with pysftp.Connection('host', username='me', password='pass', cnopts=cnopts):
    # do stuff here

完全に異なる known_hosts ファイルを使用するには、インスタンス化時にファイルを指定することで、~/.ssh/known_hosts を探して CnOpts をオーバーライドできます。

import pysftp
cnopts = pysftp.CnOpts(knownhosts='path/to/your/knownhostsfile')

with pysftp.Connection('host', username='me', password='pass', cnopts=cnopts):
    # do stuff here

~/.ssh/known_hosts を使用したいが、追加の既知のホスト キーを追加する場合は、.load メソッドを使用して、追加の known_host 形式のファイルをマージして更新できます。

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys.load('path/to/your/extra_knownhosts')
with pysftp.Connection('host', username='me', password='pass', cnopts=cnopts):
    # do stuff here
于 2020-04-27T20:35:02.053 に答える
0

こんにちは、私があなたをよく理解していれば、私たちは同じ問題を抱えていました。したがって、使用しているpysftpのバージョンを確認してください。最新の 0.2.9 の場合は、0.2.8 にダウングレードします。これをチェックしてください。https://github.com/Yenthe666/auto_backup/issues/47

于 2017-01-11T14:56:31.190 に答える