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)

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


@pytest.fixture
def client(server):
    c = paramiko.SSHClient()
    c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    c.connect(hostname=server.host,
              port=server.port,
              username="root",
              password="",
              allow_agent=False,
              look_for_keys=False)
    return c


def test_ls(client):
    _stdin, stdout, stderr = client.exec_command("ls")
    assert stdout.read().decode() == "file1\nfile2\n"

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.0a2.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

fake_ssh-0.1.0a2-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fake-ssh-0.1.0a2.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.8.6

File hashes

Hashes for fake-ssh-0.1.0a2.tar.gz
Algorithm Hash digest
SHA256 5ca1333e76436c25e772343b77fa90c322e5c46f03fa7f1474d30c8c3a63fbb7
MD5 8e312f44c1dac37099e1c46b8692307f
BLAKE2b-256 a3e4f2e584c2e633f87c9046275328a59ec011beae43b7fa8cdad81a3693f06e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fake_ssh-0.1.0a2-py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.8.6

File hashes

Hashes for fake_ssh-0.1.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 2496655588faa5db659c21871c68e05f26f8001323a205587b613391e251f11a
MD5 9e9f6c6d8a49d12aa956e6ad9b0583e9
BLAKE2b-256 267d9ecc17e911dc4b4e714ebff553baa13cfb5a9342ce91172bdab5a08fbf60

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