28 lines
1.3 KiB
Python
Raw Normal View History

2025-05-09 14:19:29 +02:00
import asyncio,os,asyncssh
HOST='0.0.0.0'
PORT=2225
USERNAME='user'
PASSWORD='password'
SHELL='/bin/sh'
2025-01-31 12:06:42 +01:00
class CustomSSHServer(asyncssh.SSHServer):
2025-05-09 14:19:29 +02:00
def connection_made(A,conn):print(f"New connection from {conn.get_extra_info("peername")}")
def connection_lost(A,exc):print('Client disconnected')
def password_auth_supported(A):return True
def validate_password(A,username,password):return username==USERNAME and password==PASSWORD
2025-01-31 12:06:42 +01:00
async def custom_bash_process(process):
2025-05-09 14:19:29 +02:00
'Spawns a custom bash shell process';A=process;B=os.environ.copy();B['TERM']='xterm-256color';C=await asyncio.create_subprocess_exec(SHELL,'-i',stdin=asyncio.subprocess.PIPE,stdout=asyncio.subprocess.PIPE,stderr=asyncio.subprocess.PIPE,env=B)
async def D():
while True:
B=await C.stdout.read(1)
if not B:break
A.stdout.write(B)
async def E():
while True:
B=await A.stdin.read(1)
if not B:break
C.stdin.write(B)
await asyncio.gather(D(),E())
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'],process_factory=custom_bash_process);print(f"SSH server running on {HOST}:{PORT}");await asyncio.Future()
if __name__=='__main__':
try:asyncio.run(start_ssh_server())
except(OSError,asyncssh.Error)as e:print(f"Error starting SSH server: {e}")