OpenWrt 上的 ssh 免密登录

一般在用 OpenSSH 服务器的系统上进行 ssh 免密登录时,我们只需要在本地生成密钥对,将私钥留在本地,将公钥上传到目标服务器上的 .ssh/authorized_keys 就可以了。

然而 OpenWrt 上的 ssh 服务器却用的 Dropbear,它是一种在较低内存和处理器资源的嵌入式系统中替代 OpenSSH 的软件,因此使用起来用诸多的不同。

1. 免密登录到 OpenWrt

如果本地是用 ssh-keygen 生成的密钥对,那么只需要将公钥上传到路由器的 /etc/dropbear/authorized_keys 中就行了:

cat ~/.ssh/id_rsa.pub | ssh root@192.168.1.1 'cat >> /etc/dropbear/authorized_keys'

2. 从 OpenWrt 登录到其他机器

想从OpenWrt免密登录其他机器,也要先生成密钥对并将公钥上传。由于无法使用 ssh-keygen,我们可以直接用 dropbearkey 生成:

dropbearkey -t rsa -f ~/.ssh/id_rsa
Generating key, this may take a while…
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCn02fMyD2T1ECmDZso8EG1m/4eo5LJtNlbqCMu0SkABsOUvmTHozrPzoJ10SlcAhjnc84S//VGEAbNJxUTaYn0M7f7M8Q4NBSyPF9DMcNAWKM01OSll8BWLQafZeZneW+UOwO6h1LOd6UEaLS8lhKQUD05+dSzKhPHimZudlhkV2bO7KOkiFh3P4K1GakHBuXitB1V9QH144BKKlSqNXy7TZcJf5/oRkB76ZmdSDDMQtvfCHF1BZwggStgBsu9K6nAl8lz9MOVHCYs9AkEIurldrHLUKvoGJ4QA5yc3bEMQaMH7vu3G5YMysIY4w5+aVuZh5Wg4THoh6yXPfGUc7Mh root@OpenWrt
Fingerprint: md5 2d:8f:e9:e7:31:75:f0:f4:ba:b8:54:4c:2f:43:9b:33

这样就将私钥生成到 ~/.ssh/id_rsa 了,并将公钥打印到了屏幕上。建议将公钥也保存下来,以便以后使用:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCn02fMyD2T1ECmDZso8EG1m/4eo5LJtNlbqCMu0SkABsOUvmTHozrPzoJ10SlcAhjnc84S//VGEAbNJxUTaYn0M7f7M8Q4NBSyPF9DMcNAWKM01OSll8BWLQafZeZneW+UOwO6h1LOd6UEaLS8lhKQUD05+dSzKhPHimZudlhkV2bO7KOkiFh3P4K1GakHBuXitB1V9QH144BKKlSqNXy7TZcJf5/oRkB76ZmdSDDMQtvfCHF1BZwggStgBsu9K6nAl8lz9MOVHCYs9AkEIurldrHLUKvoGJ4QA5yc3bEMQaMH7vu3G5YMysIY4w5+aVuZh5Wg4THoh6yXPfGUc7Mh root@OpenWrt" > ~/.ssh/id_rsa.pub

然后就和原来一样,将公钥上传到目标服务器就可以了:

cat ~/.ssh/id_rsa.pub | ssh remote_username@remote_host 'cat >> .ssh/authorized_keys'

但是在登录的时候要注意,使用 ssh 命令需要加 -i 参数指定所用的私钥:

ssh -i ~/.ssh/id_rsa remote_username@remote_host

记得使用scp等类似命令也要这样。