用于测试目的模拟SSH服务器

10

我需要为上传文件的部署脚本编写测试,但我希望它不依赖于外部服务器配置。我的解决方案如下:

  1. 在回环接口的不同端口上创建2个无需身份验证的SSH守护程序。
  2. 在这两个端口上运行部署脚本。

唯一的问题是如何运行这些虚拟SSH守护进程。

我使用Python和Fabric。

3个回答

7
如果你想完全控制服务器的操作(例如模拟各种问题情况以进行彻底的测试),我建议使用twisted:正如本文所示,它使自定义SSH服务器的设置变得非常容易。
如果你更愿意使用现有的ssh服务器,请从此处列表中选择一个(如果有的话,请使用系统自带的;或者如果你在Windows上,则可以使用sshwindows),并通过Python的subprocess作为启动测试的一部分来运行它。

谢谢有用的想法,但我只是在Monkey Patched Fabric API中运行所有命令来在本地服务器上运行。无论如何,我会将你的评论标记为最佳解决方案。 - Dmitry Gladkov

4
另一种选择是启动一个带有sshd服务的docker容器。您可以使用像这样的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客户端来使用伪服务器。例如:

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

如果这个可行的话,你就可以使用任何基于paramiko或fabric的ssh客户端或脚本来测试这个模拟服务器。
希望这能帮到你。

1
重新实现SSH守护程序并不是一件简单的事情。
如果你唯一的问题是不想让他们依赖于现有的配置,你可以启动一个新的sshd,使用-f指定特定的配置和-p在给定端口上运行。
你可以使用os.system来调用shell:
os.system('sshd -f myconfig -p 22022')

这是一个很好的想法,我差不多把它做出来了,但是我被 ssh-agent 卡住了,因为它不能使用特定的 authorized_keys 文件运行两次。无论如何,感谢您的回复! - Dmitry Gladkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接