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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | b6f0eb7b2f514157d971e563066e4334fb87cb65bdbc8b7f67a552e095232757 |
|
MD5 | faeadbaa994648c7b6bd8e9a04dc0300 |
|
BLAKE2b-256 | 90a3d68c625e0d5db4085bec8f9f0f849731a26ff4d23b27b85437829a8da234 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fe007372de7cd6477c10b8fdba216a78c8a8a55f84dc9dd5252c72224042a2c |
|
MD5 | dd0d3260cf1c37e8127a296e24053c22 |
|
BLAKE2b-256 | 47434628fb55c3fddad892b1989df2b6b0fb141de2de4fb87bcd2b30c838a8be |