78 lines
1.9 KiB
Python
Raw Normal View History

2025-01-31 12:06:42 +01:00
import asyncio
import os
2025-03-29 07:13:23 +01:00
import asyncssh
2025-01-31 12:06:42 +01:00
# SSH Server Configuration
HOST = "0.0.0.0"
PORT = 2225
USERNAME = "user"
PASSWORD = "password"
SHELL = "/bin/sh" # Change to another shell if needed
2025-03-29 07:13:23 +01:00
2025-01-31 12:06:42 +01:00
class CustomSSHServer(asyncssh.SSHServer):
def connection_made(self, conn):
print(f"New connection from {conn.get_extra_info('peername')}")
def connection_lost(self, exc):
print("Client disconnected")
def password_auth_supported(self):
return True
def validate_password(self, username, password):
return username == USERNAME and password == PASSWORD
2025-03-29 07:13:23 +01:00
2025-01-31 12:06:42 +01:00
async def custom_bash_process(process):
"""Spawns a custom bash shell process"""
env = os.environ.copy()
env["TERM"] = "xterm-256color"
# Start the Bash shell
bash_proc = await asyncio.create_subprocess_exec(
2025-03-29 07:13:23 +01:00
SHELL,
"-i",
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
env=env,
2025-01-31 12:06:42 +01:00
)
async def read_output():
while True:
data = await bash_proc.stdout.read(1)
if not data:
break
process.stdout.write(data)
async def read_input():
while True:
data = await process.stdin.read(1)
if not data:
break
bash_proc.stdin.write(data)
await asyncio.gather(read_output(), read_input())
2025-03-29 07:13:23 +01:00
2025-01-31 12:06:42 +01:00
async def start_ssh_server():
"""Starts the AsyncSSH server with Bash"""
await asyncssh.create_server(
lambda: CustomSSHServer(),
host=HOST,
port=PORT,
server_host_keys=["ssh_host_key"],
2025-03-29 07:13:23 +01:00
process_factory=custom_bash_process,
2025-01-31 12:06:42 +01:00
)
print(f"SSH server running on {HOST}:{PORT}")
await asyncio.Future() # Keep running
2025-03-29 07:13:23 +01:00
2025-01-31 12:06:42 +01:00
if __name__ == "__main__":
try:
asyncio.run(start_ssh_server())
except (OSError, asyncssh.Error) as e:
print(f"Error starting SSH server: {e}")