File size: 2,722 Bytes
f7ec70d cc69415 f36614e f7ec70d 181ae35 f7ec70d a92df86 f7ec70d a92df86 f7ec70d e7e8666 f7ec70d 3bed305 181ae35 3bed305 181ae35 6f7d972 181ae35 f7ec70d f36614e f7ec70d 181ae35 cc69415 f3cd87b 181ae35 f7ec70d 181ae35 f36614e f7ec70d e7e8666 f7ec70d f36614e f7ec70d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#!/usr/bin/env python3
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):
# Если пользователь ввёл 'exit', закрываем сессию
if data.strip() == 'exit':
self.chan.write("До свидания!\n")
self.chan.exit(0)
else:
# Эхо-ответ: выводим, что ввёл пользователь
self.chan.write("Вы ввели: " + data)
def connection_lost(self, exc):
pass
# Класс SSH-сервера
class MySSHServer(asyncssh.SSHServer):
def session_requested(self):
return MySSHServerSession()
async def begin_auth(self, username):
# Простой способ проверки: разрешаем любые логины
return True
# Генерация временного SSH-ключа в памяти
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 (по умолчанию 2222)
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()
|