簡體   English   中英

無法通過 AsyncSSH 連接,錯誤主機密鑰不受信任

[英]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

您應該始終驗證服務器的公鑰。

根據您的用例,您可以:

  • 獲取服務器主機密鑰,將它們與您的應用程序捆綁在一起,並將它們顯式傳遞給 asyncssh(例如,作為帶有您的 known_hosts 文件路徑的字符串)。
  • 在命令行上手動連接到服務器。 SSH 然后會詢問您是否要信任該服務器。 然后將密鑰添加到~/.ssh/known_hosts並且 AsyncSSH 將使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM