嵌入式中提供ssh服务的通常是使用dropbear

更改端口号和只允许某个网卡连接

在/etc/default/dropbear 中添加条目DROPBEAR_PORT=10022就能更改ssh服务的端口号为10022。

在某些特殊情况下,对于有两个2网卡的设备,可能需要限制只能通过某一个网卡来进行ssh登录。假设网卡1IP地址是192.168.0.206,假设网卡2的IP地址是192.168.1.136。如果只允许通过网卡1来连接,可以设置DROPBEAR_PORT=192.168.0.206:10022

客户端免密登录

假设有两台设备,一个是设备A,可能是个windows系统。另外一台是服务器S。 以两种情况下的来实现从设备A免密登录服务器B的原理。

常规Linux服务器免密登录

常规Linux服务器安装的是OpenSSH套件,配置的方式如下:

  1. 在A设备上,生成公钥、私钥。

    ssh-keygen -t rsa

  2. 必须要将公钥放入到S的.ssh/authorized_keys 文件中。

一种方式是通过ssh-copy-id拷贝到服务器S上,命令如下:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.136

ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

另外一种是手动将公钥文件重命名拷贝到.ssh/authorized_keys中。

  1. 设备A上的私钥管理

如果默认私钥放在.ssh 下,那么ssh命令在连接所有设备会自动的尝试读取。因此自然就能用来登录设备S。

如果需要指定在登录某些设备使用哪个私钥,可以在.ssh/目录下添加config文件。

也可以在使用ssh命令时,手动指定要使用的私钥文件。

注意:需要注意的是,需要将.ssh/id_rsa权限设置为700

  1. 如果使用putty,plink等工具来自动登录设备,还需要对生成的id_rsa进行转换,转成putty工具能识别的私钥文件。

打开puttygen,点击加载。加载id_rsa文件,然后再点击保存私钥文件,就能保存成putty能使用的文件,成功的文件已ppk后缀结尾。

1
putty.exe -ssh root@192.168.10.106 -i h:\device.ppk

使用dropbear的嵌入式免密登录

其实可以忽略设备是使用dropbear还是openssh,针对服务器的所有操作一样,关键点就是将公钥放入到服务器的.ssh/authorized_keys。

不可忽略的关键点

因为本身使用ssh就是针对关于安全方面,所以,关于能否免密登录的核心关键点就是权限,比如 authorized_keys 文件的权限,必须设置成700。对于嵌入式设备来说,还必须关注文件的拥有者问题。

因为嵌入式设备的文件系统基本上都是在HOST机器上处理,并打包的。因此,烧写到设备后,可能会发现文件的拥有者莫名奇妙。通常,嵌入式设备只有一个用户,就是root用户。因此,需要特别注意处理文件系统中文件的拥有者问题。

实际测试发现,如果文件拥有者属性不对,设备将不支持免密登录功能。