Skip to main content

Fakes an SSH Server

Project description

Mock SSH Server

Do you...

  • have a test that SSHs into a server and don't want the hassle of setting one up for testing?

  • think monkeypatching isn't as good as it sounds?

  • want to develop an application and need a fake server to return predefined results?

This package is for you!

Installation

pip install fake-ssh

Usage

Blocking Server

A blocking server is often used for development purposes.

Simply write yourself a server.py file:

from typing import Optional
from fake_ssh import Server


def handler(command: str) -> Optional[str]:
    if command.startswith("ls"):
        return "file1\nfile2\n"
    elif command.startswith("echo"):
        return command[4:].strip() + "\n"

if __name__ == "__main__":
    Server(command_handler=handler, port=5050).run_blocking()

And run it:

$ python3 server.py

In a separate terminal, run:

$ ssh root@127.0.0.1 -p 5050 echo 42
42
                                                                         
$ ssh root@127.0.0.1 -p 5050 ls
file1
file2

(if you are prompted for a password, you can leave it blank)

Note how you need to specify a non standard port (5050). Using the standard port (22) would require root permissions and is probably unsafe.

Non-Blocking Server

A non blocking server is often used in tests.

This server runs in a thread and allows you to run some tests in parallel.

import paramiko
import pytest

from fake_ssh import Server


def handler(command):
    if command == "ls":
        return "file1\nfile2\n"


@pytest.fixture
def server():
    with Server(command_handler=handler) as server:
        yield server


def my_ls(host, port):
    c = paramiko.SSHClient()
    c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    c.connect(hostname=host,
              port=port,
              username="root",
              password="",
              allow_agent=False,
              look_for_keys=False)
    return c.exec_command("ls")[1].read().decode().splitlines()


def test_ls(server):
    assert my_ls(server.host, server.port) == ["file1", "file2"]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fake-ssh-0.1.0a4.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

fake_ssh-0.1.0a4-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file fake-ssh-0.1.0a4.tar.gz.

File metadata

  • Download URL: fake-ssh-0.1.0a4.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.8.7

File hashes

Hashes for fake-ssh-0.1.0a4.tar.gz
Algorithm Hash digest
SHA256 b6f0eb7b2f514157d971e563066e4334fb87cb65bdbc8b7f67a552e095232757
MD5 faeadbaa994648c7b6bd8e9a04dc0300
BLAKE2b-256 90a3d68c625e0d5db4085bec8f9f0f849731a26ff4d23b27b85437829a8da234

See more details on using hashes here.

File details

Details for the file fake_ssh-0.1.0a4-py3-none-any.whl.

File metadata

  • Download URL: fake_ssh-0.1.0a4-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.8.7

File hashes

Hashes for fake_ssh-0.1.0a4-py3-none-any.whl
Algorithm Hash digest
SHA256 2fe007372de7cd6477c10b8fdba216a78c8a8a55f84dc9dd5252c72224042a2c
MD5 dd0d3260cf1c37e8127a296e24053c22
BLAKE2b-256 47434628fb55c3fddad892b1989df2b6b0fb141de2de4fb87bcd2b30c838a8be

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page