| |
| import asyncio |
| import asyncssh |
| import os |
| import sys |
| from io import BytesIO |
|
|
| |
| class MySSHServerSession(asyncssh.SSHServerSession): |
| def connection_made(self, chan): |
| self.chan = chan |
|
|
| def session_started(self): |
| self.chan.write("Добро пожаловать в SSH-сервис на Hugging Face Spaces!\n") |
| self.chan.write("Введите команду (для выхода наберите 'exit'):\n") |
|
|
| def data_received(self, data, datatype): |
| |
| if data.strip() == 'exit': |
| self.chan.write("До свидания!\n") |
| self.chan.exit(0) |
| else: |
| |
| self.chan.write("Вы ввели: " + data) |
|
|
| def connection_lost(self, exc): |
| pass |
|
|
| |
| class MySSHServer(asyncssh.SSHServer): |
| def session_requested(self): |
| return MySSHServerSession() |
|
|
| async def begin_auth(self, username): |
| |
| return True |
|
|
| |
| def generate_temp_ssh_key(): |
| private_key = asyncssh.generate_private_key('ssh-rsa') |
| private_key_str = private_key.private_key_data.decode('utf-8') |
| return private_key_str |
|
|
| |
| async def start_ssh_server(): |
| |
| port = int(os.environ.get('PORT', 2222)) |
|
|
| |
| private_key_str = generate_temp_ssh_key() |
|
|
| try: |
| |
| private_key = asyncssh.import_private_key(private_key_str) |
|
|
| server = await asyncssh.create_server( |
| MySSHServer, '', port, |
| server_host_keys=[private_key] |
| ) |
| except (OSError, asyncssh.Error) as exc: |
| sys.exit('Ошибка при запуске сервера: ' + str(exc)) |
| |
| print('SSH-сервер запущен на порту', port) |
| await server.wait_closed() |
|
|
| def main(): |
| try: |
| asyncio.run(start_ssh_server()) |
| except (OSError, asyncssh.Error) as exc: |
| sys.exit('Ошибка: ' + str(exc)) |
|
|
| if __name__ == '__main__': |
| main() |
|
|