Starchik commited on
Commit
f36614e
·
verified ·
1 Parent(s): f032a9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -32
app.py CHANGED
@@ -1,54 +1,58 @@
1
  import os
2
  import asyncio
3
- import paramiko
4
- import socket
5
- import threading
6
  from flask import Flask
7
- from flask_socketio import SocketIO
8
- from paramiko import SSHServer, SSHClient
9
 
10
  app = Flask(__name__)
11
- socketio = SocketIO(app)
12
 
13
  SSH_PORT = 2222 # Локальный порт для SSH
14
  SSH_USER = "user"
15
  SSH_PASSWORD = "password"
16
 
17
- class MySSHServer(paramiko.ServerInterface):
18
- def check_auth_password(self, username, password):
19
- if username == SSH_USER and password == SSH_PASSWORD:
20
- return paramiko.AUTH_SUCCESSFUL
21
- return paramiko.AUTH_FAILED
22
-
23
- def get_allowed_auths(self, username):
24
- return "password"
25
-
26
- def start_ssh_server():
27
- """Запускаем SSH-сервер на Python с использованием paramiko"""
28
- host_key = paramiko.RSAKey.generate(2048)
29
- ssh_server = paramiko.SSHServer()
30
-
31
- ssh_server.set_server_host_key(host_key)
32
- ssh_server.set_subsystem_handler('sftp', paramiko.SFTPServer)
33
 
34
  try:
35
- ssh_server.start()
36
- print(f"SSH Server started on port {SSH_PORT}")
 
 
 
 
 
 
 
37
  except Exception as e:
38
  print(f"Error starting SSH server: {e}")
39
 
40
  @app.route('/')
41
  def home():
42
- return "SSH сервер работает!"
 
 
 
 
 
 
 
 
43
 
44
- if __name__ == '__main__':
45
- # Генерируем ключи для SSH
46
  if not os.path.exists("ssh_host_key"):
47
  os.system("ssh-keygen -b 2048 -t rsa -f ssh_host_key -N ''")
48
 
49
- # Запуск SSH-сервера в отдельном потоке
50
- thread = threading.Thread(target=start_ssh_server)
51
- thread.start()
52
 
53
- # Запуск Flask приложения
54
- socketio.run(app, host='0.0.0.0', port=7860)
 
 
 
 
1
  import os
2
  import asyncio
3
+ import asyncssh
 
 
4
  from flask import Flask
 
 
5
 
6
  app = Flask(__name__)
 
7
 
8
  SSH_PORT = 2222 # Локальный порт для SSH
9
  SSH_USER = "user"
10
  SSH_PASSWORD = "password"
11
 
12
+ async def start_ssh_server():
13
+ """Запускаем SSH-сервер на Python (без root-прав)"""
14
+ async def handle_client(process):
15
+ process.stdout.write("Welcome to Python SSH Server!\n")
16
+ while not process.stdin.at_eof():
17
+ line = await process.stdin.readexactly(1)
18
+ process.stdout.write(line)
 
 
 
 
 
 
 
 
 
19
 
20
  try:
21
+ await asyncssh.listen(
22
+ "", SSH_PORT,
23
+ server_host_keys=["ssh_host_key"],
24
+ process_factory=handle_client,
25
+ authorized_client_keys=None,
26
+ password_auth=True,
27
+ username_passwords={SSH_USER: SSH_PASSWORD}
28
+ )
29
+ print(f"SSH server running on port {SSH_PORT}")
30
  except Exception as e:
31
  print(f"Error starting SSH server: {e}")
32
 
33
  @app.route('/')
34
  def home():
35
+ """Пробрасываем SSH через Ngrok"""
36
+ try:
37
+ import pyngrok
38
+ ssh_tunnel = pyngrok.ngrok.connect(SSH_PORT, "tcp")
39
+ print(f"SSH tunnel established: {ssh_tunnel.public_url}")
40
+ return f"SSH доступ: {ssh_tunnel.public_url.replace('tcp://', '')}"
41
+ except Exception as e:
42
+ print(f"Error starting Ngrok: {e}")
43
+ return "Error starting Ngrok tunnel."
44
 
45
+ if __name__ == "__main__":
46
+ # Генерируем SSH-ключи (если их нет)
47
  if not os.path.exists("ssh_host_key"):
48
  os.system("ssh-keygen -b 2048 -t rsa -f ssh_host_key -N ''")
49
 
50
+ # Запускаем SSH сервер асинхронно
51
+ loop = asyncio.get_event_loop()
52
+ loop.create_task(start_ssh_server())
53
 
54
+ # Запускаем Flask
55
+ try:
56
+ app.run(host="0.0.0.0", port=7860)
57
+ except Exception as e:
58
+ print(f"Error starting Flask app: {e}")