有谁知道如何将 ssh 公钥导入 ASR9K (IOS-XR)?

网络工程 ssh 验证 cisco-ios-xr cisco-asr
2021-07-07 00:39:10

我正在尝试使用 ssh 公钥身份验证登录 ASR9001 路由器。我试图将我的 ssh 公钥导入路由器,但没有成功。

RP/0/RSP0/CPU0:ASR9K-1#crypto key import authentication rsa disk0:/test.pem
无法执行命令:参数无效

有谁知道这是怎么做到的吗?

谢谢。

3个回答

我收到了 Cisco 技术支持的回复,手册中有一些内容没有正确描述。

首先,ASR 路由器支持与其手册相反的 1024 位或更小的密钥大小(最多支持 2048 位密钥)。
其次,只有 SSH 公钥的关键部分必须使用 base64 编码/解码程序进行“解码”。

SSH 密钥生成

ssh-keygen -b 1024 -t rsa -f myrouter_sshkey

这将生成myrouter_sshkeymyrouter_sshkey.pub当您查看公钥文件时,它如下所示:

SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAAAgQDR / ggtknqBZ50pIAyzw0E93wfu2EsGLnft / uF6N4ov6Dsp1H7yoC5ssE + yOcrWHeDEQnD0BsNCLZPW + ye7jjYeE + CUrOINpi04PtD + zx95knpAFnREMV7w8fJ9c7 / SMb2L4Jk6KlmTcqtM + lUgrxEnCD7Z1kpCUzkP + 0D0N / RG2Q == foo@bar.com

我们只需要用空格分隔的公钥文件的第二部分进行base64解码。

使用 base64 对 SSH 公钥进行“解码”。

cut -d" " -f2 myrouter_sshkey.pub | base64 -d > myrouter_sshkey.pub.b64

这个生成的文件是二进制格式,可以导入到 ASR 路由器中。
请注意,如果您使用的是 MAC,请改用 -D 选项。

将“解码”的公钥上传到路由器。

RP/0/RSP0/CPU0:ASR9K#copy ftp:myrouter_sshkey.pub.b64 harddisk:/

我使用 ftp,但您可以使用 tftp 或其他。

将公钥导入路由器用户。

RP/0/RSP0/CPU0:ASR9K#admin
RP/0/RSP0/CPU0:ASR9K(admin)#crypto key import authentication rsa username admin

验证密钥导入

RP/0/RSP0/CPU0:ASR9K(admin)#sh crypto key authentication rsa all    
Key label: admin
Type     : RSA public key authentication
Size     : 1024
Imported : 18:39:54 UTC Thu Jul 03 2014
Data     :
 {{intentionally removed}}

登录测试

ssh -oIdentitiesOnly=yes -i myrouter_sshkey ${myrouter}

请注意,如果您有多个 ssh 密钥,则-oIdentitiesOnly=yes必须提供,否则您的连接将失败。SSH 会按顺序尝试每个密钥,直到其中一个密钥被接受或最终回退到密码验证(如果适用)。即使第一次密钥试验失败,SSH 服务器也可能允许多次密钥试验。不幸的是,ASR 路由器似乎不允许这样做。如果第一个尝试的密钥失败,它将断开会话。要明确指定您使用的密钥,请-oIdentitiesOnly=yes为 ssh提供选项。

ip ssh pubkey-chain
  username ...
    key-string
    ...
    exit
  exit
exit

ASR9k 上的 IOS-XR 似乎在这个主题上的记录很差(除了说它支持它。)crypto key import authentication rsa general-keys似乎是命令,但没有使用它来导入用户密钥的示例,而不是路由器自己的身份。

Minsuk Song 的说明奏效了,但是我不清楚其中的一些步骤。我想澄清几件事。

回复:“将‘解码’的公钥上传到路由器。” 部分。 该示例不共享从远程系统中提取密钥的确切语法。另请注意,您需要运行 FTP 服务器。对于 Windows,您可以使用 Filezilla,对于 Linux,我使用 python 库 pyftpdlib(您可以 pip install 模块)然后运行

sudo python -m pyftpdlib -p 21 -w

从远程服务器拉取的实际语法是

copy ftp://@10.10.10.10//yourpublickey.pub harddisk:/

然后 Cisco 将提示您输入登录信息。

回复:“将公钥导入路由器用户。” 我不需要输入“admin”(我运行的是 Cisco IOS XR 7.4.15)。我使用的语法如下:

crypto key import authentication rsa username yourusernameonthecisco ftp://@10.10.10.10//yourpublickey.pub

其他一切工作正常。