ssh / app.py
Starchik's picture
Update app.py
f36614e verified
raw
history blame
1.92 kB
import os
import asyncio
import asyncssh
from flask import Flask
app = Flask(__name__)
SSH_PORT = 2222 # Локальный порт для SSH
SSH_USER = "user"
SSH_PASSWORD = "password"
async def start_ssh_server():
"""Запускаем SSH-сервер на Python (без root-прав)"""
async def handle_client(process):
process.stdout.write("Welcome to Python SSH Server!\n")
while not process.stdin.at_eof():
line = await process.stdin.readexactly(1)
process.stdout.write(line)
try:
await asyncssh.listen(
"", SSH_PORT,
server_host_keys=["ssh_host_key"],
process_factory=handle_client,
authorized_client_keys=None,
password_auth=True,
username_passwords={SSH_USER: SSH_PASSWORD}
)
print(f"SSH server running on port {SSH_PORT}")
except Exception as e:
print(f"Error starting SSH server: {e}")
@app.route('/')
def home():
"""Пробрасываем SSH через Ngrok"""
try:
import pyngrok
ssh_tunnel = pyngrok.ngrok.connect(SSH_PORT, "tcp")
print(f"SSH tunnel established: {ssh_tunnel.public_url}")
return f"SSH доступ: {ssh_tunnel.public_url.replace('tcp://', '')}"
except Exception as e:
print(f"Error starting Ngrok: {e}")
return "Error starting Ngrok tunnel."
if __name__ == "__main__":
# Генерируем SSH-ключи (если их нет)
if not os.path.exists("ssh_host_key"):
os.system("ssh-keygen -b 2048 -t rsa -f ssh_host_key -N ''")
# Запускаем SSH сервер асинхронно
loop = asyncio.get_event_loop()
loop.create_task(start_ssh_server())
# Запускаем Flask
try:
app.run(host="0.0.0.0", port=7860)
except Exception as e:
print(f"Error starting Flask app: {e}")