我在远程服务器 Linux Ubuntu 中运行 docker Yang Development Kit for python ydk-py
。我想在其中使用以下命令建立连接。
(ydk-py)samples$ ./bgp.py --host <ip-address-of-netconf-server> -u <username> -p <password> --port <port-number>
主机位于AWS 中。我过去常常通过我的机器EC2 instance
访问,在那里我下载了。EC2 instance
ssh
ssh key
以下参数已知,--host <ip-address-of-netconf-server> -u <username>
但如何获取密码和端口?
换句话说,如何使用下载的 RSA 密钥建立 NETCONF 会话并将服务器移除至 Cisco CSR 1000v?
答案1
Oaky,我会试着回答。这也许不能帮你解决问题,但希望这是一个起点。
EC2
我认为您实际面临的问题是 AWS 要求您使用密钥对 v1000 实例进行身份验证,但 YDK 在构建时就考虑到了密码身份验证。您可以尝试破解实例并启用密码身份验证,但我并不认为这是更好的选择。
看起来 Netconf 在端口上运行830
,但是所有涉及 SSH 访问的 AWS 指南都指的是进入 Linux 实例本身,除非我误解了。
思科的指南中有一节使用 SSH 连接到 CSR 1000v 实例:
AWS 上的 Cisco CSR 1000v 实例需要 SSH 才能访问控制台。要访问 Cisco CSR 1000v AMI,请执行以下步骤 [片段]
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
实现这一点。它实际上在文件中会话管理器。此代码处理您在命令行上传递的参数:
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_path
给 AMI 用户的 PEM 文件。
然而,这又引发了一个问题:为什么默认端口是 830?这似乎可能是与之前设置的密钥对不同的密钥对。或者我可能没有理解。授予 AMI 映像的 shell 访问权限实际上是使用密钥进行 netconf 吗?也许对 Cisco 有更多了解的人可以对此做出贡献。
在 AWS 版本的 CSRV1000 上搜索有关更改 netconf 凭据的文档也没有找到太多信息。正如我在评论中提到的,有一个指南建议使用组合cisco1/cisco1
。
虽然不是一个完整的解决方案,但希望能有所帮助。
答案2
我已找到解决方案。
在路由器中:
(config)#user any-user-name privilege 15 secret supersecretpassword
然后,它就成功了!感谢所有试图提供帮助的人 :)