模拟SSH服务器以进行测试

时间:2010-07-06 12:56:52

标签: python testing deployment ssh fabric

我必须为通过SSH上传文件的部署脚本编写测试,但我想让它不依赖于外部服务器配置。这就是我的看法:

  1. 在不同的loopback接口端口上创建2个没有认证的SSH守护进程。
  2. 在这两个端口上运行部署脚本
  3. 唯一的问题是如何运行这些虚拟SSH守护进程。

    我使用Python和Fabric。

3 个答案:

答案 0 :(得分:6)

如果您想完全控制服务器的操作(例如,为了模拟各种问题条件,从而进行真正彻底的测试),我建议twisted:正如本文所示,它使设置变得非常简单您自己的自定义SSH服务器。

如果您更愿意使用现有的ssh服务器,请从列表here中选择一个(或者使用您系统附带的服务器,如果有的话;或者如果您使用的话,请使用sshwindows Windows)并使用Python中的subprocess运行它,作为启动测试的一部分。

答案 1 :(得分:1)

重新实现SSH守护进程并非易事。

如果您唯一的问题是根据现有配置不需要它们,则可以使用-f启动新的 sshd 以指定特定配置,并在给定端口上运行-p。

您可以使用 os.system 来调用shell:

os.system('sshd -f myconfig -p 22022')

答案 2 :(得分:0)

另一个选择是启动运行sshd服务的dockerized容器。您可以使用像这样的docker映像:

我已使用它来测试部署脚本(在fabric之上制作)。

这是您的使用方式。

拉出图像。

➜ docker pull kabirbaidhya/fakeserver

设置服务器的授权密钥。

➜ cat ~/.ssh/id_rsa.pub > /path/to/authorized_keys

运行虚拟服务器。

➜ docker run -d -p 2222:22 \
             -v "/path/to/authorized_keys:/etc/authorized_keys/tester" \
             -e SSH_USERS="tester:1001:1001" \
             --name=fakeserver kabirbaidhya/fakeserver

您现在可以从任何ssh客户端使用fakeserver。例如:

➜ ssh tester@localhost -p 2222
➜ ssh tester@localhost -p 2222 "echo 'Hello World'"

如果这行得通,那么您可以使用paramiko或fabric之上的任何ssh客户端或脚本来对此模拟服务器进行测试。

希望这会有所帮助。