【问题标题】:Emulate SSH server for testing purposes模拟 SSH 服务器以进行测试
【发布时间】:2011-03-12 07:25:01
【问题描述】:

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

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

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

我使用 Python 和 Fabric。

【问题讨论】:

    标签: python testing deployment ssh fabric


    【解决方案1】:

    如果您想完全控制服务器的操作(例如,为了模拟各种问题条件,从而进行真正彻底的测试),我推荐twisted:正如本文所示,它可以让您轻松设置自己的操作自定义 SSH 服务器。

    如果您更愿意使用现有的 ssh 服务器,请从列表 here 中选择一个(或使用系统随附的服务器,如果有的话;或者如果您在 Windows 上,则可能是 sshwindows)并运行使用 Python 中的 subprocess 作为启动测试的一部分。

    【讨论】:

    • 感谢有用的想法,但我只是修改了 Fabric API 以在本地服务器上运行所有命令。我会标记你的评论,因为它有最好的解决方案。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这是一个好主意,我几乎让它工作了,但我被 ssh-agent 卡住了,它不能使用特定的 authorized_keys 文件运行两次。无论如何,感谢您的回复!
    【解决方案3】:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2013-04-01
      • 2023-03-09
      • 2022-01-22
      • 2017-06-25
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多