全部博文(90)
分类: 嵌入式
2010-12-21 18:31:57
以下文字大多数翻译自CodePlex,其中提供了一个WINCE5.0下基于ARMV4I编译的SSH服务器,下载二进制程序放到板子上就可以运行,但是感觉远程shell做的不是太好。
什么是SSH
SSH是在本地电脑和远程电脑之间建立安全网络通道的标准指令集。它使用公共密钥加密的方法授权远程计算机登录并且寻求远程计算机授权用户(可选)。SSH在两台电脑之间利用加密和消息认证码(message authentication codes ,MACs)提供机密的和完整的数据交换。SSH通常用于登录远程机器并且执行命令,同时它也支持tunneling、forwarding arbitrary TCP port; 它也可以通过SFTP和SCP协议来实现文件传送。
在下面的RFC中描述:
a、SSH传输层协议(RFC4253)
b、SSH认证协议(RFC4252)
c、SSH协议架构(RFC4251)
总之,SSH的本职是提供一种安全的telnet、ftp和tunneling。安全的意思是使用了用户认证和加密的数据交换。
SSH和OpenSSH关系
SSH的英文全称是Secure Shell Protocol,安全外壳协议。 通过使用SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的”通道”。SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。SSH是由客户端和服务端的软件组成的。SSH安装容易、使用简单,而且比较常见,一般的Unix系统、Linux系统、FreeBSD系统都附带有支持SSH的应用程序包。
为什么选择使用OpenSSH移植到WINCE上
WINCE上使用的SSH Server是基于OpenSSH v4.3最初由Tatu Ylonen开发的。由三个原因在WINCE上使用OpenSSH:
1、OpenSSH Server是网络上比较流行的SSH Server;
2、OpenSSH 是一个开源,易移植的SSH Server在多种类unix的OS上使用;
3、OpenSSH已经支持了SSH Server具有的特性。
此服务器支持SSH的什么版本
SSH协议有两个版本,WINCE上移植的SSH Server仅支持最新的SSH2协议,因为此协议普遍的支持。
在图中1.99意思是服务器同时被SSH1和SSH2支持。
用户管理怎么实现当前在SSH
Server中并不支持每一个用户一个目录。在OpenSSH软件中用户密钥保存在用户文件夹或者由系统处理。因为WINCE系统并不提供这种特性,所以这个软件目前并没有实现这部分功能,密钥对于任何用户都是一样的。
结论:公共密钥对于所有用户是一样的。
支持特性
远程Shell
远程程序执行
Secure FTP(SFTP)
Secure Copy (SCP)
Port Forwarding
编译和使用
编译
这个工程设计被集成到Platform builder中。尽管可能通过EVC++或者Visual Studio编译但是当前并没有提供这样的工作区。
编译
1、从CodePlex得到源码
2、拷贝SSH文件夹到BSP目录
3、改变如下设置来适应你的平台:
a、 改变在SSH\ssh.cmn中的路径. 例如 : SSHPROJECTROOT_DIR = c:\wince500 \platform\myBSP\SSH
b、改变路径在SSH/SSHD/include/parhnames.h中定义的路径。例如:#define SSHDIR /Hard Disk/SSH (Server将在此路径下寻找一些配置文件)。这个路径可以在注册表中被重写(HKEY_LOCAL_MACHINE\COMM\SSHD "SSHROOTDIR"="\MY\New\PATH").
1、添加CryptoAPI组件到PB工作区
2、编译(编译SSL库需要一些时间)
使用
1、 你需要创建一个目录,SSH将在这个目录中寻找配置文件(/Hard Disk/SSH,前面的例子中是这样的);
2、 你需要为你的server创建配置文件(sshd_config),和OpenSSH配置文件差不多除了个别关键字不支持外;
3、 你需要为你的Server创建DSA密钥;
4、 启动Server(执行sshd程序)。
注意:当你运行在debug模式下时候,你可能会遇到debugchk在_open函数中。这里仅仅是用来警示开发者使用此函数的返回值必须小心。
我在使用此SSH服务器时,觉得有几点需要注意
1、因为是使用编译好的二进制文件所以一定要按照上面的路径做设置;
2、需要为系统添加一个用户;
3、此服务器可能和系统提供的telnet或ftp服务器有冲突;(在系统组件中添加了telnet和ftp服务器后SSH能够登录但是不能显示交互)
4、如果需要查看调试信息请在定制系统时候增加cmd窗口组件;