模拟SSH服务器用于测试

10 投票
3 回答
8599 浏览
提问于 2025-04-16 00:52

我需要为一个通过SSH上传文件的部署脚本写测试,但我希望这个测试不依赖外部服务器的配置。我的想法是这样的:

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

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

我使用Python和Fabric。

3 个回答

1

重新实现一个SSH守护进程可不是件简单的事。

如果你唯一的问题是你不想让它依赖现有的配置,你可以启动一个新的 sshd,使用 -f 参数来指定一个特定的配置文件,使用 -p 参数来指定运行的端口。

你可以用 os.system 来调用系统的命令行:

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

另一种选择是启动一个运行着sshd服务的docker容器。你可以使用以下这些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的脚本来测试这个模拟服务器。

希望这对你有帮助。

7

如果你想完全掌控服务器的操作,比如模拟各种问题情况,进行彻底的测试,我推荐使用twisted这个工具。正如这篇文章所示,它让你轻松搭建自己的自定义SSH服务器。

如果你更倾向于使用现成的SSH服务器,可以从这个列表中选择一个(或者使用你系统自带的那个,如果有的话;如果你是Windows用户,可以试试sshwindows),然后通过Python中的subprocess模块来运行它,作为你测试启动的一部分。

撰写回答