Created
May 21, 2020 16:20
-
-
Save vxgmichel/7685685b3e5ead04ada4a3ba75a48eef to your computer and use it in GitHub Desktop.
Serve a ptpython console using both telnet and ssh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Serve a ptpython console using both telnet and ssh | |
""" | |
import pathlib | |
import asyncio | |
import asyncssh | |
from ptpython.repl import embed | |
from prompt_toolkit import print_formatted_text | |
from prompt_toolkit.contrib.telnet.server import TelnetServer | |
from prompt_toolkit.contrib.ssh.server import PromptToolkitSSHServer | |
def ensure_key(filename="ssh_host_key"): | |
path = pathlib.Path(filename) | |
if not path.exists(): | |
rsa_key = asyncssh.generate_private_key("ssh-rsa") | |
path.write_bytes(rsa_key.export_private_key()) | |
return str(path) | |
async def interact(connection=None): | |
global_dict = {**globals(), "print": print_formatted_text} | |
await embed(return_asyncio_coroutine=True, globals=global_dict) | |
async def main(ssh_port=8022, telnet_port=8023): | |
ssh_server = PromptToolkitSSHServer(interact=interact) | |
await asyncssh.create_server( | |
lambda: ssh_server, "", ssh_port, server_host_keys=[ensure_key()]) | |
print(f"Running ssh server on port {ssh_port}...") | |
telnet_server = TelnetServer(interact=interact, port=telnet_port) | |
telnet_server.start() | |
print(f"Running telnet server on port {telnet_port}...") | |
while True: | |
await asyncio.sleep(60) | |
if __name__ == '__main__': | |
asyncio.run(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment