本文介绍了“没有找到……的主机密钥"在 pysftp 代码中,即使 cnopts.hostkeys 设置为 None的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
背景
要通过 SFTP 连接到另一台服务器,我在 UNIX 命令行中使用以下命令:
To SFTP across to another server I use the following command in the UNIX command line:
sftp -i /some_dir/another_dir/key -oPort=12345 [email protected]
我想要达到的目标
我想将此转换为与 一起使用的命令PySFTP
.
I want to convert this to command to be used with PySFTP
.
我的尝试
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
# source: https://pysftp.readthedocs.io/en/release_0.2.7/pysftp.html
srv = pysftp.Connection("[email protected]", port="12345",
private_key_pass="/some_dir/another_dir/key")
遇到错误
File "./aws_sql_dumper.py", line 14, in <module>
srv = pysftp.Connection("[email protected]", port="12345", private_key_pass="/some_dir/another_dir/key")
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 132, in __init__
self._tconnect['hostkey'] = self._cnopts.get_hostkey(host)
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 71, in get_hostkey
raise SSHException("No hostkey for host %s found." % host)
paramiko.ssh_exception.SSHException: No hostkey for host [email protected] found.
Exception ignored in: <bound method Connection.__del__ of <pysftp.Connection object at 0x7f6067c7ea20>>
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 1013, in __del__
self.close()
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 784, in close
if self._sftp_live:
AttributeError: 'Connection' object has no attribute '_sftp_live'
研究完成
我已阅读以下内容:
问题
我认为我在做一些根本性的错误.如何采用UNIX命令行中使用的SFTP命令被pysftp
接受/解释?
I think I am doing something fundamental wrong. How can I adopt the SFTP command used in UNIX command line to be accepted/interpretted by pysftp
?
变化
我改变了一些东西
import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys.load('/home/some_dir/.ssh/known_hosts')
# source: https://pysftp.readthedocs.io/en/release_0.2.7/pysftp.html
srv = pysftp.Connection("[email protected]", port="12345",
private_key="/some_dir/another_dir/key", cnopts=cnopts)
修改后的输出
Traceback (most recent call last):
File "./aws_sql_dumper.py", line 17, in <module>
srv = pysftp.Connection("[email protected]", port="12345", private_key="/some_dir/another_dir/key", cnopts=cnopts)
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 132, in __init__
self._tconnect['hostkey'] = self._cnopts.get_hostkey(host)
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 71, in get_hostkey
raise SSHException("No hostkey for host %s found." % host)
paramiko.ssh_exception.SSHException: No hostkey for host [email protected]" found.
Exception ignored in: <bound method Connection.__del__ of <pysftp.Connection object at 0x7f8120dc6438>>
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 1013, in __del__
self.close()
File "/usr/local/lib/python3.4/dist-packages/pysftp/__init__.py", line 784, in close
if self._sftp_live:
AttributeError: 'Connection' object has no attribute '_sftp_live
推荐答案
经过多次尝试和错误,转换以下 SFTP 命令放入终端:
After much trial and error, converting the following SFTP command put into the terminal:
sftp -i /some_dir/another_dir/key -oPort=12345 [email protected]
可以翻译*为:
paramiko.SSHClient().connect(hostname='12.123.456.789', username='user', port=12345,
key_filename='/some_dir/another_dir/key')
整个精简代码是:
#!/usr/bin/python3
import paramiko
try:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy)
client.connect(hostname='12.123.456.789', username='user', port=12345,
key_filename='/some_dir/another_dir/key')
# -------------------------- [ just for testing ] --------------------------
stdin, stdout, stderr = client.exec_command('ls -la') # THIS IS FOR TESTING
print(stdout.read()) # AND PRINTING OUT
finally:
client.close()
这篇关于“没有找到……的主机密钥"在 pysftp 代码中,即使 cnopts.hostkeys 设置为 None的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!