Start · Sprachen · PHP · Referenz · ssh2_auth_none

ssh2_auth_none

Funktion

Versucht eine SSH2-Authentifizierung ohne Anmeldedaten und gibt die vom Server unterstützten Authentifizierungsmethoden zurück.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_auth_none(resource $session, string $username): string[]|false

Beschreibung

ssh2_auth_none sendet eine Authentifizierungsanfrage vom Typ none an den SSH2-Server. Die meisten SSH-Server lehnen diese Methode als alleinige Authentifizierung ab, geben jedoch dabei eine Liste der tatsächlich erlaubten Authentifizierungsmethoden zurück (z. B. password, publickey, keyboard-interactive). Diese Information kann genutzt werden, um vorab zu ermitteln, welche Methoden der Server akzeptiert, bevor eine eigentliche Anmeldung versucht wird.

Gibt die Funktion true zurück, hat der Server die none-Authentifizierung tatsächlich akzeptiert – dies ist in der Praxis äußerst selten und auf speziell konfigurierte Server beschränkt. In den meisten Fällen erhält man ein Array mit den unterstützten Methoden oder false bei einem Fehler.

Die Funktion setzt eine aktive SSH2-Verbindung voraus, die zuvor mit ssh2_connect hergestellt wurde. Sie ist besonders nützlich als Vorbereitung für einen gezielten Authentifizierungsversuch, um unnötige Fehlschläge bei nicht unterstützten Methoden zu vermeiden.

Parameter

Name Typ Default Beschreibung
$session Pflicht resource Eine aktive SSH2-Verbindungsressource, wie sie von ssh2_connect zurückgegeben wird.
$username Pflicht string Der Benutzername, für den die Authentifizierung versucht werden soll.

Rückgabewert

Typ
string[]|true|false
Beschreibung

Gibt ein Array mit den vom Server unterstützten Authentifizierungsmethoden zurück (z. B. ['publickey', 'password']), wenn die none-Authentifizierung abgelehnt wurde. Gibt true zurück, wenn der Server die Authentifizierung ohne Anmeldedaten akzeptiert hat. Gibt false zurück, wenn ein Fehler aufgetreten ist.

Beispiele

Unterstützte Authentifizierungsmethoden abfragen

<?php
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
    die('Verbindung zum SSH-Server fehlgeschlagen.');
}

$authMethods = ssh2_auth_none($connection, 'deploy');

if ($authMethods === true) {
    echo 'Server erlaubt anonyme Anmeldung (none).' . PHP_EOL;
} elseif (is_array($authMethods)) {
    echo 'Unterstützte Authentifizierungsmethoden:' . PHP_EOL;
    foreach ($authMethods as $method) {
        echo ' - ' . $method . PHP_EOL;
    }
} else {
    echo 'Fehler beim Abfragen der Authentifizierungsmethoden.' . PHP_EOL;
}
Unterstützte Authentifizierungsmethoden: - publickey - password

Methode prüfen und gezielt authentifizieren

<?php
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
    die('Verbindung fehlgeschlagen.');
}

$authMethods = ssh2_auth_none($connection, 'deploy');

if (is_array($authMethods) && in_array('publickey', $authMethods)) {
    $result = ssh2_auth_pubkey_file(
        $connection,
        'deploy',
        '/home/user/.ssh/id_rsa.pub',
        '/home/user/.ssh/id_rsa'
    );
    if ($result) {
        echo 'Erfolgreich per Public-Key authentifiziert.' . PHP_EOL;
    } else {
        echo 'Public-Key-Authentifizierung fehlgeschlagen.' . PHP_EOL;
    }
} elseif ($authMethods === true) {
    echo 'Bereits als none authentifiziert.' . PHP_EOL;
} else {
    echo 'publickey wird nicht unterstützt oder Fehler aufgetreten.' . PHP_EOL;
}
Erfolgreich per Public-Key authentifiziert.

// Wichtig · Fallstricke

Erweiterung erforderlich: ssh2_auth_none gehört zur PECL-Erweiterung ssh2, die nicht im PHP-Standard-Lieferumfang enthalten ist und separat installiert werden muss (z. B. via pecl install ssh2).

Sicherheitshinweis: Ein Server, der die none-Authentifizierung wirklich akzeptiert, ist fehlkonfiguriert und stellt ein erhebliches Sicherheitsrisiko dar. Prüfen Sie in Produktivumgebungen stets, dass diese Methode serverseitig deaktiviert ist.

Rückgabetyp beachten: Der Rückgabewert kann true, ein Array oder false sein – eine strenge Typprüfung mit is_array() bzw. === true ist daher zwingend erforderlich, da ein leeres Array und false unterschiedliche Bedeutungen haben.