代码之家  ›  专栏  ›  技术社区  ›  Dmitry Gladkov

为测试目的模拟ssh服务器

  •  9
  • Dmitry Gladkov  · 技术社区  · 16 年前

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

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

    唯一的问题是如何运行这些伪ssh守护进程。

    我用蟒蛇和布料。

    3 回复  |  直到 7 年前
        1
  •  6
  •   Alex Martelli    16 年前

    如果您希望完全控制服务器的操作(例如为了模拟各种问题条件,从而进行真正彻底的测试),我建议 twisted :正如本文所显示的,这使得设置自己的自定义ssh服务器变得非常容易。

    如果您希望使用现有的ssh服务器,请从列表中选择一个。 here (或者使用系统附带的工具,如果有的话;或者 sshwindows 如果你在Windows上)并用 subprocess 从Python开始测试。

        2
  •  1
  •   Donald Miner    16 年前

    重新实现ssh守护进程并不容易。

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

    你可以使用 OS-系统 调用shell:

    os.system('sshd -f myconfig -p 22022')
    
        3
  •  0
  •   kabirbaidhya Jan Hančič    7 年前

    另一个选项是在运行sshd服务的情况下启动一个已固定容器。您可以使用这样的Docker图像:

    我用这个测试了一个部署脚本(构建在结构之上)。

    这是你使用它的方法。

    拉图像。

    ➜ 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之上的脚本来针对这个模拟服务器进行测试。

    希望这有帮助。

    推荐文章