9

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

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

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

我使用 Python 和 Fabric。

4

3 回答 3

7

如果您想完全控制服务器的操作(例如,为了模拟各种问题情况,从而进行真正彻底的测试),我建议您使用twisted:如本文所示,它可以很容易地设置您自己的自定义 SSH 服务器。

如果您更愿意使用现有的 ssh 服务器,请从此处的列表中选择一个(或者使用系统附带的服务器,如果有的话;或者如果您在 Windows 上,也可以使用sshwindows )并使用Python 中的进程运行它启动测试的一部分。

于 2010-07-06T14:42:47.063 回答
1

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

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

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

os.system('sshd -f myconfig -p 22022')
于 2010-07-06T13:17:08.893 回答
1

另一种选择是启动一个运行 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 客户端或脚本来针对这个模拟服务器进行测试。

希望这可以帮助。

于 2018-10-17T18:14:51.833 回答