Net :: SSH:创建一个可以与之交互的ruby SSH服务器是多么容易?

时间:2014-03-05 15:47:00

标签: ruby net-ssh

我有这个ruby库,它建立到远程设备的telnet或ssh连接。一切似乎都有效。测试框架(适用于telnet)定义绑定到端口的设备模拟器,测试连接绑定到同一端口。然后整个有效载荷交换通过该信道,即认证步骤。

使用SSH,我在调整时遇到了问题,因为显然,模仿协议的身份验证步骤并不容易。由于我们使用net-ssh,客户端需要所有的身份验证步骤(ssh版本,alghoritm协商,密钥交换......),我不知道详细消息的格式(我找不到很多任何地方的例子。)

我期待的是一种实际信号通知客户端通道可以未加密(用于测试,而不是问题)的方式,我希望收到提示(基于密码,我不需要authorized_keys进程测试环境)。

这种考验是否有简单的实施/现有实施?

1 个答案:

答案 0 :(得分:0)

是的,

用于单元测试mock Net::SSH,对于集成测试,请测试完整堆栈(Net::SSH +您的应用+您的基础架构)

单元测试

对于单元测试,将Net::SSH替换为实现您正在使用的方法的StructOpenStruct或同名的普通老Ruby对象。这个模拟类不需要连接到实际的SSH服务器,它只需要像连接到它一样嘎嘎叫,它可以将其输入和输出存储到实例变量中,这样你就可以对它们进行断言。

通过这种方式,您可以测试应用程序是否发送正确的用户名/ pass / ip / execution并正确解析命令/ etc,而不是测试Net::SSH是否能够进行SSH连接(这将由Net::SSH负责宝石)。

测试将更多更快,然后连接到真实的东西。

这是VCR宝石背后的基本理念 - 不要让服务器嘎嘎叫,让客户端嘎嘎叫。

一旦你这样做了,如果你为它做了一个很好的API,你可以把它提交给https://github.com/net-ssh/net-ssh/上的好人,这是一个有用的东西,目前似乎缺失了

整合测试

保持集成测试非常基础。

您可能需要通过一个额外的硬编码集成测试来检查Net::SSH +您的应用+您的服务器基础架构是否兼容,该测试连接到基础架构中的实际服务器并建立连接并执行命令

升级SSH守护程序或强化基础架构可能会破坏应用程序的功能 - 例如,如果您引入selinux,禁用弱密码,切换到类似Solaris的有趣操作系统或Net::SSH人们忘记为bug引入解决方法对于您可能正在使用的某个体系结构(solaris SSH密码问题,ubuntu 10 known_hosts问题,......)。