Starchik commited on
Commit
c13279a
·
verified ·
1 Parent(s): acd3bad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -36
app.py CHANGED
@@ -1,58 +1,54 @@
1
  import os
2
  import asyncio
3
- import asyncssh
4
- import pyngrok
 
5
  from flask import Flask
 
 
6
 
7
  app = Flask(__name__)
 
8
 
9
  SSH_PORT = 2222 # Локальный порт для SSH
10
  SSH_USER = "user"
11
  SSH_PASSWORD = "password"
12
 
13
- async def start_ssh_server():
14
- """Запускаем SSH-сервер на Python (без root-прав)"""
15
- async def handle_client(process):
16
- process.stdout.write("Welcome to Python SSH Server!\n")
17
- while not process.stdin.at_eof():
18
- line = await process.stdin.readexactly(1)
19
- process.stdout.write(line)
 
 
 
 
 
 
 
 
 
20
 
21
  try:
22
- await asyncssh.listen(
23
- "", SSH_PORT,
24
- server_host_keys=["ssh_host_key"],
25
- process_factory=handle_client,
26
- authorized_client_keys=None,
27
- password_auth=True,
28
- username_passwords={SSH_USER: SSH_PASSWORD}
29
- )
30
- print(f"SSH server running on port {SSH_PORT}")
31
  except Exception as e:
32
  print(f"Error starting SSH server: {e}")
33
 
34
  @app.route('/')
35
  def home():
36
- """Пробрасываем SSH через Ngrok"""
37
- try:
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}")
 
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)