我必须为通过 SSH 上传文件的部署脚本编写测试,但我希望它不依赖于外部服务器配置。这就是我的看法:
- 在环回接口的不同端口上创建 2 个无需身份验证的 SSH 守护程序。
- 在这两个端口上运行部署脚本
唯一的问题是如何运行这些虚拟 SSH 守护进程。
我使用 Python 和 Fabric。
我必须为通过 SSH 上传文件的部署脚本编写测试,但我希望它不依赖于外部服务器配置。这就是我的看法:
唯一的问题是如何运行这些虚拟 SSH 守护进程。
我使用 Python 和 Fabric。
如果您想完全控制服务器的操作(例如,为了模拟各种问题情况,从而进行真正彻底的测试),我建议您使用twisted:如本文所示,它可以很容易地设置您自己的自定义 SSH 服务器。
如果您更愿意使用现有的 ssh 服务器,请从此处的列表中选择一个(或者使用系统附带的服务器,如果有的话;或者如果您在 Windows 上,也可以使用sshwindows )并使用Python 中的子进程运行它启动测试的一部分。
重新实现 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
运行假服务器。
➜ 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 客户端或脚本来针对这个模拟服务器进行测试。
希望这可以帮助。