一、背景
计划在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 Dropbear SSH client v2022.82
Dropbear版本的SSH需要特定格式的密钥,而不是由ssh-keygen
生成的PEM格式的。
原因清晰了,解决方法也显而易见了:我们使用Dropbear重新生成一个支持的密钥。
dropbearkey -f ~/.ssh/id_dropbear -t rsa -s 2048
执行后将会返回密钥的公钥(需要注意,这里和通过ssh-keygen
生成的方式不同,并没有单独的文件)。
将通过Dropbear生成的公钥复制到远程主机,再次使用密钥登录远程主机,一切正常,问题解决。