Initial commit
Dieser Commit ist enthalten in:
335
vps_connection.py
Normale Datei
335
vps_connection.py
Normale Datei
@ -0,0 +1,335 @@
|
||||
"""
|
||||
VPS Connection Module
|
||||
Handles SSH connection to VPS server
|
||||
"""
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import subprocess
|
||||
from utils.logger import logger
|
||||
|
||||
class VPSConnection:
|
||||
def __init__(self):
|
||||
self.server = "91.99.192.14"
|
||||
self.username = "claude-dev"
|
||||
self.password = "z0E1Al}q2H?Yqd!O"
|
||||
logger.info("VPSConnection initialized")
|
||||
|
||||
def create_ssh_script(self) -> str:
|
||||
"""Create a script for SSH connection with automatic password and Claude start"""
|
||||
import tempfile
|
||||
import os
|
||||
logger.info(f"Creating SSH script for VPS connection to {self.server}")
|
||||
|
||||
# Create a simple bash script for SSH connection
|
||||
bash_script = f'''#!/bin/bash
|
||||
echo "================================================================================"
|
||||
echo " Claude VPS Server Connection"
|
||||
echo "================================================================================"
|
||||
echo ""
|
||||
echo "Server: {self.server}"
|
||||
echo "Username: {self.username}"
|
||||
echo ""
|
||||
|
||||
# Try to use sshpass if available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "Connecting to VPS server and starting Claude automatically..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "claude || bash"
|
||||
else
|
||||
# Try to install sshpass
|
||||
echo "Installing sshpass for automatic login..."
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
sudo apt-get update -qq 2>/dev/null
|
||||
sudo apt-get install -y sshpass -qq 2>/dev/null
|
||||
fi
|
||||
|
||||
# Check again if sshpass is now available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "sshpass installed successfully!"
|
||||
echo "Connecting to VPS server and starting Claude automatically..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "claude || bash"
|
||||
else
|
||||
echo "Manual password entry required."
|
||||
echo ""
|
||||
echo "Password: {self.password}"
|
||||
echo "(Right-click to paste)"
|
||||
echo ""
|
||||
echo "After login, type: claude"
|
||||
echo ""
|
||||
ssh -o StrictHostKeyChecking=no {self.username}@{self.server}
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Connection closed."
|
||||
echo "Press Enter to exit..."
|
||||
read
|
||||
'''
|
||||
|
||||
# Save bash script with Unix line endings
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False, newline='\n') as f:
|
||||
f.write(bash_script)
|
||||
bash_path = f.name
|
||||
|
||||
# Convert to WSL path
|
||||
bash_wsl_path = bash_path.replace('\\', '/').replace('C:', '/mnt/c')
|
||||
|
||||
script_content = f"""@echo off
|
||||
cls
|
||||
REM Convert line endings and launch WSL with the bash script
|
||||
wsl dos2unix {bash_wsl_path} 2>nul || wsl sed -i 's/\r$//' {bash_wsl_path}
|
||||
wsl chmod +x {bash_wsl_path}
|
||||
wsl bash {bash_wsl_path}
|
||||
|
||||
REM Clean up temp file
|
||||
del "{bash_path}" 2>nul
|
||||
"""
|
||||
return script_content
|
||||
|
||||
def create_readme_content(self) -> str:
|
||||
"""Generate README content for VPS project"""
|
||||
from datetime import datetime
|
||||
|
||||
content = f"""# Claude VPS Server
|
||||
|
||||
*This README was automatically generated by Claude Project Manager*
|
||||
|
||||
## Server Information
|
||||
|
||||
- **Server IP**: {self.server}
|
||||
- **Username**: {self.username}
|
||||
- **Connection**: SSH (Port 22)
|
||||
|
||||
## How to Connect
|
||||
|
||||
### Using Claude Project Manager
|
||||
1. Click on the VPS Server tile
|
||||
2. Terminal will open with connection instructions
|
||||
3. Enter the password when prompted
|
||||
4. Type `claude` after successful login
|
||||
|
||||
### Manual Connection
|
||||
```bash
|
||||
ssh {self.username}@{self.server}
|
||||
```
|
||||
|
||||
## Available Commands
|
||||
|
||||
After connecting to the VPS:
|
||||
- `claude` - Start Claude CLI
|
||||
- `ls` - List files
|
||||
- `cd <directory>` - Change directory
|
||||
- `exit` - Close SSH connection
|
||||
|
||||
## Security Notes
|
||||
|
||||
- Keep your password secure
|
||||
- Don't share SSH credentials
|
||||
- Always logout when finished (`exit` command)
|
||||
|
||||
## Features
|
||||
|
||||
This VPS server provides:
|
||||
- Remote access to Claude
|
||||
- Persistent environment
|
||||
- Isolated workspace
|
||||
- Full Linux environment
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Connection Issues
|
||||
1. Check internet connection
|
||||
2. Verify server is online
|
||||
3. Ensure SSH port (22) is not blocked
|
||||
4. Try manual SSH command
|
||||
|
||||
### Authentication Failed
|
||||
- Verify password is correct
|
||||
- Check username spelling
|
||||
- Ensure caps lock is off
|
||||
|
||||
---
|
||||
|
||||
## Connection Log
|
||||
|
||||
- README generated on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
|
||||
"""
|
||||
return content
|
||||
|
||||
def generate_vps_readme(self, readme_path: str):
|
||||
"""Generate and save VPS README"""
|
||||
logger.info(f"Generating VPS README at: {readme_path}")
|
||||
content = self.create_readme_content()
|
||||
|
||||
# Create directory if needed
|
||||
os.makedirs(os.path.dirname(readme_path), exist_ok=True)
|
||||
|
||||
# Write README
|
||||
with open(readme_path, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
return readme_path
|
||||
|
||||
def create_admin_panel_script(self) -> str:
|
||||
"""Create a script for SSH connection to Admin Panel with directory change"""
|
||||
import tempfile
|
||||
import os
|
||||
logger.info("Creating Admin Panel SSH script")
|
||||
|
||||
# Create a simple bash script for SSH connection
|
||||
bash_script = f'''#!/bin/bash
|
||||
echo "================================================================================"
|
||||
echo " Claude Admin Panel Connection"
|
||||
echo "================================================================================"
|
||||
echo ""
|
||||
echo "Server: {self.server}"
|
||||
echo "Username: {self.username}"
|
||||
echo "Target Directory: /opt/v2-Docker"
|
||||
echo ""
|
||||
|
||||
# Try to use sshpass if available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "Connecting to VPS server and starting Claude in Admin Panel..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "cd /opt/v2-Docker && echo 'Changed to /opt/v2-Docker' && claude || bash"
|
||||
else
|
||||
# Try to install sshpass
|
||||
echo "Installing sshpass for automatic login..."
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
sudo apt-get update -qq 2>/dev/null
|
||||
sudo apt-get install -y sshpass -qq 2>/dev/null
|
||||
fi
|
||||
|
||||
# Check again if sshpass is now available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "sshpass installed successfully!"
|
||||
echo "Connecting to VPS server and starting Claude in Admin Panel..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "cd /opt/v2-Docker && echo 'Changed to /opt/v2-Docker' && claude || bash"
|
||||
else
|
||||
echo "Manual password entry required."
|
||||
echo ""
|
||||
echo "Password: {self.password}"
|
||||
echo "(Right-click to paste)"
|
||||
echo ""
|
||||
echo "After login:"
|
||||
echo "1. Type: cd /opt/v2-Docker"
|
||||
echo "2. Type: claude"
|
||||
echo ""
|
||||
ssh -o StrictHostKeyChecking=no {self.username}@{self.server}
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Connection closed."
|
||||
echo "Press Enter to exit..."
|
||||
read
|
||||
'''
|
||||
|
||||
# Save bash script with Unix line endings
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False, newline='\n') as f:
|
||||
f.write(bash_script)
|
||||
bash_path = f.name
|
||||
|
||||
# Convert to WSL path
|
||||
bash_wsl_path = bash_path.replace('\\', '/').replace('C:', '/mnt/c')
|
||||
|
||||
script_content = f"""@echo off
|
||||
cls
|
||||
REM Convert line endings and launch WSL with the bash script
|
||||
wsl dos2unix {bash_wsl_path} 2>nul || wsl sed -i 's/\r$//' {bash_wsl_path}
|
||||
wsl chmod +x {bash_wsl_path}
|
||||
wsl bash {bash_wsl_path}
|
||||
|
||||
REM Clean up temp file
|
||||
del "{bash_path}" 2>nul
|
||||
"""
|
||||
return script_content
|
||||
|
||||
def create_vps_docker_script(self) -> str:
|
||||
"""Create a script for SSH connection to VPS Docker with docker compose commands"""
|
||||
import tempfile
|
||||
import os
|
||||
logger.info("Creating VPS Docker restart script")
|
||||
|
||||
# Create a bash script for SSH connection with docker commands
|
||||
bash_script = f'''#!/bin/bash
|
||||
echo "================================================================================"
|
||||
echo " VPS Docker Admin Panel Restart"
|
||||
echo "================================================================================"
|
||||
echo ""
|
||||
echo "Server: {self.server}"
|
||||
echo "Username: {self.username}"
|
||||
echo "Target Directory: /opt/v2-Docker/v2"
|
||||
echo ""
|
||||
|
||||
# Try to use sshpass if available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "Connecting to VPS server and restarting Admin Panel..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "cd /opt/v2-Docker/v2 && echo -e '\\n[Restarting Admin Panel Docker containers...]\\n' && docker compose down && echo -e '\\n[Building containers with no cache...]\\n' && docker compose build --no-cache && echo -e '\\n[Starting containers in detached mode...]\\n' && docker compose up -d && echo -e '\\n[SUCCESS] Admin Panel restart completed successfully!\\n' || echo -e '\\n[ERROR] Error during restart process!\\n'"
|
||||
else
|
||||
# Try to install sshpass
|
||||
echo "Installing sshpass for automatic login..."
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
sudo apt-get update -qq 2>/dev/null
|
||||
sudo apt-get install -y sshpass -qq 2>/dev/null
|
||||
fi
|
||||
|
||||
# Check again if sshpass is now available
|
||||
if command -v sshpass >/dev/null 2>&1; then
|
||||
echo "sshpass installed successfully!"
|
||||
echo "Connecting to VPS server and restarting Admin Panel..."
|
||||
echo ""
|
||||
sshpass -p "{self.password}" ssh -o StrictHostKeyChecking=no -t {self.username}@{self.server} "cd /opt/v2-Docker/v2 && echo -e '\\n[Restarting Admin Panel Docker containers...]\\n' && docker compose down && echo -e '\\n[Building containers with no cache...]\\n' && docker compose build --no-cache && echo -e '\\n[Starting containers in detached mode...]\\n' && docker compose up -d && echo -e '\\n[SUCCESS] Admin Panel restart completed successfully!\\n' || echo -e '\\n[ERROR] Error during restart process!\\n'"
|
||||
else
|
||||
echo "Manual password entry required."
|
||||
echo ""
|
||||
echo "Password: {self.password}"
|
||||
echo "(Right-click to paste)"
|
||||
echo ""
|
||||
echo "After login, the following commands will be executed:"
|
||||
echo "1. cd /opt/v2-Docker/v2"
|
||||
echo "2. docker compose down"
|
||||
echo "3. docker compose build --no-cache"
|
||||
echo "4. docker compose up -d"
|
||||
echo ""
|
||||
ssh -o StrictHostKeyChecking=no {self.username}@{self.server}
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Press Enter to close..."
|
||||
read
|
||||
'''
|
||||
|
||||
# Save bash script with Unix line endings
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False, newline='\n') as f:
|
||||
f.write(bash_script)
|
||||
bash_path = f.name
|
||||
|
||||
# Convert to WSL path
|
||||
bash_wsl_path = bash_path.replace('\\', '/').replace('C:', '/mnt/c')
|
||||
|
||||
script_content = f"""@echo off
|
||||
cls
|
||||
REM Convert line endings and launch WSL with the bash script
|
||||
wsl dos2unix {bash_wsl_path} 2>nul || wsl sed -i 's/\r$//' {bash_wsl_path}
|
||||
wsl chmod +x {bash_wsl_path}
|
||||
wsl bash {bash_wsl_path}
|
||||
|
||||
REM Clean up temp file
|
||||
del "{bash_path}" 2>nul
|
||||
"""
|
||||
return script_content
|
||||
|
||||
# Test module
|
||||
if __name__ == "__main__":
|
||||
vps = VPSConnection()
|
||||
print("VPS Connection Module")
|
||||
print(f"Server: {vps.server}")
|
||||
print(f"Username: {vps.username}")
|
||||
print("\nSSH Script Preview:")
|
||||
print(vps.create_ssh_script()[:300] + "...")
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren