PHP Classes

File: ssh/ssh_daemon.php

Recommend this page to a friend!
  Packages of Matthew Asham   Binkterm PHP   ssh/ssh_daemon.php   Download  
File: ssh/ssh_daemon.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Binkterm PHP
Bulletin board system based on the Web
Author: By
Last change:
Date: 5 days ago
Size: 4,637 bytes
 

Contents

Class file image Download
#!/usr/bin/env php
<?php

require_once __DIR__ . '/../vendor/autoload.php';
require_once
__DIR__ . '/src/SshSession.php';
require_once
__DIR__ . '/src/SshStreamWrapper.php';
require_once
__DIR__ . '/src/SshServer.php';
require_once
__DIR__ . '/../telnet/src/BbsSession.php';
require_once
__DIR__ . '/../telnet/src/TelnetUtils.php';
require_once
__DIR__ . '/../telnet/src/TerminalMarkupRenderer.php';
require_once
__DIR__ . '/../telnet/src/SixelImageRenderer.php';
require_once
__DIR__ . '/../telnet/src/TerminalBoxRenderer.php';
require_once
__DIR__ . '/../telnet/src/TerminalSplitScreen.php';
require_once
__DIR__ . '/../telnet/src/ChatHandler.php';
require_once
__DIR__ . '/../telnet/src/MailUtils.php';
require_once
__DIR__ . '/../telnet/src/NetmailHandler.php';
require_once
__DIR__ . '/../telnet/src/EchomailHandler.php';
require_once
__DIR__ . '/../telnet/src/ShoutboxHandler.php';
require_once
__DIR__ . '/../telnet/src/BulletinsHandler.php';
require_once
__DIR__ . '/../telnet/src/TerminalShellInterface.php';
require_once
__DIR__ . '/../telnet/src/TuiShell.php';
require_once
__DIR__ . '/../telnet/src/LineShell.php';
require_once
__DIR__ . '/../telnet/src/TerminalShellFactory.php';
require_once
__DIR__ . '/../telnet/src/PollsHandler.php';
require_once
__DIR__ . '/../telnet/src/DoorHandler.php';
require_once
__DIR__ . '/../telnet/src/ZmodemTransfer.php';
require_once
__DIR__ . '/../telnet/src/FileHandler.php';
require_once
__DIR__ . '/../telnet/src/TerminalSettingsHandler.php';
require_once
__DIR__ . '/../telnet/src/AnsiFormField.php';
require_once
__DIR__ . '/../telnet/src/AnsiSelectField.php';
require_once
__DIR__ . '/../telnet/src/AnsiToggleField.php';
require_once
__DIR__ . '/../telnet/src/AnsiTextField.php';
require_once
__DIR__ . '/../telnet/src/AnsiActionField.php';
require_once
__DIR__ . '/../telnet/src/AnsiForm.php';
require_once
__DIR__ . '/../telnet/src/AnsiTabComponent.php';
require_once
__DIR__ . '/../telnet/src/SettingsHandler.php';
require_once
__DIR__ . '/../telnet/src/InterestsHandler.php';
require_once
__DIR__ . '/../telnet/src/QwkMenuHandler.php';
require_once
__DIR__ . '/../telnet/src/BbsListHandler.php';
require_once
__DIR__ . '/../telnet/src/NodelistBrowserHandler.php';

use
BinktermPHP\Config;
use
BinktermPHP\SshServer\SshServer;

/**
 * Parse command line arguments
 *
 * @param array $argv Command line arguments
 * @return array Associative array of parsed arguments
 */
function parseArgs(array $argv): array
{
   
$args = [];
    foreach (
$argv as $arg) {
        if (
strpos($arg, '--') === 0) {
            if (
strpos($arg, '=') !== false) {
                [
$key, $value] = explode('=', substr($arg, 2), 2);
               
$args[$key] = $value;
            } else {
               
$args[substr($arg, 2)] = true;
            }
        }
    }
    return
$args;
}

/**
 * Build API base URL from arguments or configuration
 *
 * @param array $args Parsed command line arguments
 * @return string API base URL
 */
function buildApiBase(array $args): string
{
    if (!empty(
$args['api-base'])) {
        return
rtrim($args['api-base'], '/');
    }

    try {
        return
Config::getSiteUrl();
    } catch (\
Exception $e) {
        return
'http://127.0.0.1';
    }
}

// Parse command line arguments
$args = parseArgs($argv);

// Show help if requested
if (!empty($args['help'])) {
    echo
"Usage: php ssh/ssh_daemon.php [options]\n";
    echo
" --host=ADDR Bind address (default: 0.0.0.0)\n";
    echo
" --port=PORT SSH port (default: SSH_PORT or 2022)\n";
    echo
" --api-base=URL API base URL (default: SITE_URL or http://127.0.0.1)\n";
    echo
" --debug Enable debug mode with verbose logging\n";
    echo
" --daemon Run as background daemon\n";
    echo
" --pid-file=FILE Write process ID to file (default: data/run/sshd.pid)\n";
    echo
" --insecure Disable SSL certificate verification\n";
    exit(
0);
}

// Extract configuration from arguments, falling back to .env then hardcoded defaults
$host = $args['host'] ?? Config::env('SSH_BIND_HOST', '0.0.0.0');
$port = (int)($args['port'] ?? Config::env('SSH_PORT', '2022'));
$apiBase = buildApiBase($args);
$debug = !empty($args['debug']);
$daemon = !empty($args['daemon']);
$insecure = !empty($args['insecure']);

// Create SSH server instance
$server = new SshServer($host, $port, $apiBase, $debug, $insecure);

// Set PID file path for daemon mode
$pidFile = $args['pid-file'] ?? dirname(__DIR__) . '/data/run/sshd.pid';
$server->setPidFile($pidFile);

// Start the server (this will daemonize if needed and write PID file)
$server->start($daemon);