[英]Can not connect via AsyncSSH, error Host key is not trusted
當我運行這個腳本時,我收到SSH connection failed: Host key is not trusted
錯誤,但即使連接到此主機以獲取密鑰,也會收到此錯誤。
import asyncio, asyncssh, sys
async def run_client():
async with asyncssh.connect('172.18.17.9', username="user", password="admin", port=9321) as conn:
result = await conn.run('display version', check=True)
print(result.stdout, end='')
try:
asyncio.get_event_loop().run_until_complete(run_client())
except (OSError, asyncssh.Error) as exc:
sys.exit('SSH connection failed: ' + str(exc))
嘗試將known_hosts=None
參數添加到連接方法。
asyncssh.connect('172.18.17.9', username="user", password="admin", port=9321, known_hosts=None)
來自此處的 asyncssh 文檔: https://asyncssh.readthedocs.io/en/latest/api.html#asyncssh.SSHClientConnectionOptions
known_hosts (請參閱指定已知主機)–(可選)將用於驗證 SSH 握手期間提供的服務器主機密鑰的密鑰列表。 如果未指定,則將在 file.ssh/known_hosts 中查找密鑰。 如果明確設置為 None,服務器主機密鑰驗證將被禁用。
這是相關的,但可能不完全是你的救恩:
https://github.com/ronf/asyncssh/issues/132
當你問這個問題(幫助我們幫助你)時,你應該問自己的真正問題是它在哪里失敗了? 類比的已知主機就像環境變量一樣,在您需要它們時不會出現。
編輯:立即引發的問題。 找到主機密鑰但不受信任? 唔?
EDIT2:不想對你苛刻,但我認為這是一個有用的糾正。 您有一個可以找到密鑰但不知道的軟件庫。 你會遇到很多 SSH / shell / env var 的情況,你認為理所當然的事情是未知的。 清楚地思考以幫助自己並更好地提出問題。
對我來說,插入known_hosts=None
后運行流暢
這是我在嘗試 Ortega 書中的編碼示例時的示例:我嘗試使用 localCentOS 的hostname=ip/username/password
,命令 test 是 ifconfig
import asyncssh
import asyncio
import getpass
async def execute_command(hostname, command, username, password):
async with asyncssh.connect(hostname, username = username,password=password,known_hosts=None) as connection:
result = await connection.run(command)
return result.stdout
您應該始終驗證服務器的公鑰。
根據您的用例,您可以:
~/.ssh/known_hosts
並且 AsyncSSH 將使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.