Linux

如何從 ydk-py 連接到部署在 EC2 NETCONF 會話上的 Cisco CSR 1000v

  • January 31, 2019

ydk-py在我的遠端伺服器 Linux Ubuntu 中執行 docker Yang Development Kit for python。我想在那裡使用以下命令建立連接。

(ydk-py)samples$ ./bgp.py --host <ip-address-of-netconf-server> -u <username> -p <password> --port <port-number>

主機EC2 instance在 AWS 中的位置。我曾經從我的機器上訪問EC2 instancessh在那裡我下載了ssh key.

以下參數是已知的--host <ip-address-of-netconf-server> -u <username>,但如何獲取密碼和埠?

換句話說,如何使用下載的 RSA 密鑰建立 NETCONF 會話刪除伺服器到 Cisco CSR 1000v?

我設法找到了解決方案。

在路由器中:

(config)#user any-user-name privilege 15 secret supersecretpassword

然後,它奏效了!感謝任何試圖提供幫助的人:)

奧基,我要試一試答案。這可能不會讓你一路走好,但希望這是一個起點。

EC2

我認為您實際面臨的問題是 AWS 要求您使用密鑰對 v1000 實例進行身份驗證,但 YDK 在建構時考慮了密碼身份驗證。您可以嘗試破解實例並啟用密碼身份驗證,但我不會說這是可取的。

看起來 Netconf 在埠上執行,830但所有涉及 SSH 訪問的 AWS 指南都指的是對 linux 實例本身進行砲擊,除非我誤解了。

思科的指南有一節關於使用 SSH 連接到 CSR 1000v 實例

AWS 上的 Cisco CSR 1000v 實例需要 SSH 才能訪問控制台。要訪問 Cisco CSR 1000v AMI,請執行以下步驟

$$ snip $$ ssh -i pem-file-name ec2-user @[public-ipaddress | DNS-name ]

這沒有提到任何關於埠的事情830

為此配置密鑰,在指南前面提到過,聽起來類似於為任何 EC2 linux 實例設置密鑰,並且可能應該與 IAM 使用者一起使用,正如您提到的那樣。

哪一個

我到處搜尋有關ydk-py密鑰身份驗證的資訊,但一無所獲。提到了一些密鑰,但通常用於訪問託管ydk-py而不是連接到 Cisco 盒子的系統。

但是,您連結的儲存庫似乎正在使用ydk.providers.NetconfServiceProvider,它是 C++ NetconfServiceProvider 的 Python 包裝器。根據此連結,支持密鑰:

  • private_key_path– ( str) 私鑰文件的路徑。需要 public_key_path 欄位。不允許密碼欄位。
  • public_key_path– ( str) 公鑰文件的路徑。需要 private_key_path 欄位。不允許密碼欄位。

讓我們看看如何bgp.py實現這一點。它實際上在文件session_mgr.py中。此程式碼處理您在命令行上傳遞的參數:

   parser = OptionParser(usage, formatter=HelpFormatterWithLineBreaks())
   parser.add_option("-v", "--version", dest="version",
                     help="force NETCONF version 1.0 or 1.1")
   parser.add_option("-u", "--user", dest="username", default="admin")
   parser.add_option("-p", "--password", dest="password", default="admin",
                     help="password")
   parser.add_option("--proto", dest="proto", default="ssh",
                     help="Which transport protocol to use, one of ssh or tcp")
   parser.add_option("--host", dest="host", default="localhost",
                     help="NETCONF agent hostname")
   parser.add_option("--port", dest="port", default=830, type="int",
help="NETCONF agent SSH port")

然後就在下面,創建了一個實例。

ne = NetconfServiceProvider(address=o.host,
                           port=o.port,
                           username = o.username,
                           password = o.password,
                           protocol = o.proto)

所以在這個階段,您可以嘗試將private_key_pathset 傳遞給您的 AMI 使用者的 PEM 文件。

然而,這就提出了一個問題:為什麼預設埠是 830?看起來這可能是與之前設置的單獨的密鑰對。或者,也許我不明白。授予 AMI 映像的 shell 訪問權限實際上是帶有密鑰的 netconf 嗎?也許有更多思科知識的人可以為此做出貢獻。

在此 AWS 版本的 CSRV1000 上搜尋有關更改 netconf 憑證的文件也沒有帶來太多幫助。正如我在評論中提到的,有一個指南表明該組合是cisco1/cisco1.

不是一個完整的解決方案,但希望這會有所幫助。

引用自:https://serverfault.com/questions/949705