背景

计划在OpenWRT上,定时通过SSH登录到另一台Unix并执行一些命令。在本地电脑上生成了密钥,并将公钥添加到了远程主机。在本地电脑上可直接使用密钥访问远程主机,无需验证密码。

问题

将本地生成的密钥复制到OpenWRT,执行同样SSH命令访问远程主机,提示:

Exited: String too long

解决方法

首先我们需要了解下产生问题的原因:

This error occurs because the ssh executable on OpenWRT is not the same SSH as you would expet on a normal computer

即,OpenWRT所使用的SSH是由Dropbear提供的,当我们在命令行中输入ssh 时可以看到如下返回:

root@OpenWrt:~# ssh -V
Dropbear SSH client v2022.82

Dropbear版本的SSH需要特定格式的密钥,而不是由ssh-keygen生成的PEM格式的。

原因清晰了,解决方法也显而易见了:我们使用Dropbear重新生成一个支持的密钥。

dropbearkey -f ~/.ssh/id_dropbear -t rsa -s 2048

执行后将会返回密钥的公钥(需要注意,这里和通过ssh-keygen生成的方式不同,并没有单独的文件)。

将通过Dropbear生成的公钥复制到远程主机,再次使用密钥登录远程主机,一切正常,问题解决。