【发布时间】:2011-03-12 07:25:01
【问题描述】:
我必须为通过 SSH 上传文件的部署脚本编写测试,但我希望它不依赖于外部服务器配置。我是这样看的:
- 在环回接口的不同端口上创建 2 个无需身份验证的 SSH 守护程序。
- 在这两个端口上运行部署脚本
唯一的问题是如何运行这些虚拟 SSH 守护进程。
我使用 Python 和 Fabric。
【问题讨论】:
标签: python testing deployment ssh fabric
我必须为通过 SSH 上传文件的部署脚本编写测试,但我希望它不依赖于外部服务器配置。我是这样看的:
唯一的问题是如何运行这些虚拟 SSH 守护进程。
我使用 Python 和 Fabric。
【问题讨论】:
标签: python testing deployment ssh fabric
如果您想完全控制服务器的操作(例如,为了模拟各种问题条件,从而进行真正彻底的测试),我推荐twisted:正如本文所示,它可以让您轻松设置自己的操作自定义 SSH 服务器。
如果您更愿意使用现有的 ssh 服务器,请从列表 here 中选择一个(或使用系统随附的服务器,如果有的话;或者如果您在 Windows 上,则可能是 sshwindows)并运行使用 Python 中的 subprocess 作为启动测试的一部分。
【讨论】:
重新实现 SSH 守护进程并非易事。
如果您唯一的问题是您不希望它们依赖于现有配置,您可以使用 -f 启动新的 sshd 以指定特定配置,并使用 -p 在给定端口上运行。
您可以使用 os.system 来调用 shell:
os.system('sshd -f myconfig -p 22022')
【讨论】:
另一种选择是启动一个运行 sshd 服务的 dockerized 容器。你可以使用像这样的 docker 镜像:
我用它来测试一个部署脚本(在 fabric 之上制作)。
这是你如何使用它的。
拉图片。
➜ docker pull kabirbaidhya/fakeserver
为服务器设置授权密钥。
➜ cat ~/.ssh/id_rsa.pub > /path/to/authorized_keys
运行 fakeserver。
➜ 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'"
如果可行,那么您可以使用任何 ssh 客户端或基于 paramiko 或 fabric 的脚本来针对此模拟服务器进行测试。
希望这会有所帮助。
【讨论】: