Signatur
Beschreibung
ssh2_auth_password() führt eine passwortbasierte Authentifizierung auf einer bereits geöffneten SSH2-Verbindung durch. Die Verbindung muss zuvor mit ssh2_connect() hergestellt worden sein. Bei Erfolg gibt die Funktion true zurück und die Sitzung ist bereit für weitere Operationen wie das Öffnen von Shells oder das Ausführen von Befehlen.
Diese Authentifizierungsmethode überträgt das Passwort im Klartext über den SSH-Tunnel – der Tunnel selbst ist jedoch verschlüsselt, sodass das Passwort auf dem Netzwerkweg nicht im Klartext sichtbar ist. Dennoch ist aus Sicherheitsgründen die schlüsselbasierte Authentifizierung (ssh2_auth_pubkey_file()) zu bevorzugen, da gespeicherte Passwörter im Quellcode ein erhebliches Sicherheitsrisiko darstellen.
Die Funktion gehört zur PECL-Erweiterung ssh2 und ist nicht standardmäßig in PHP enthalten. Sie muss separat installiert und in der php.ini aktiviert werden. Voraussetzung ist die Bibliothek libssh2.
Typische Einsatzgebiete sind automatisierte Deployments, Dateiübertragungen via SFTP oder das Remote-Ausführen von Befehlen auf Servern, bei denen nur Passwort-Authentifizierung verfügbar ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $session Pflicht | resource | Eine SSH2-Sitzungsressource, die zuvor mit ssh2_connect() erstellt wurde. |
|
| $username Pflicht | string | Der Benutzername, mit dem die Authentifizierung durchgeführt werden soll. | |
| $password Pflicht | string | Das Klartext-Passwort des Benutzers. Sollte niemals direkt im Quellcode hardcodiert werden. |
Rückgabewert
true zurück, wenn die Authentifizierung erfolgreich war, andernfalls false. Im Fehlerfall kann zusätzlich eine PHP-Warnung ausgelöst werden.Beispiele
Einfache SSH-Verbindung mit Passwort-Authentifizierung
<?php
// SSH-Verbindung herstellen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
die('Verbindung zum SSH-Server fehlgeschlagen.');
}
// Passwort-Authentifizierung durchführen
if (!ssh2_auth_password($connection, 'deploy', 'geheimes_passwort')) {
die('Authentifizierung fehlgeschlagen.');
}
echo 'Erfolgreich authentifiziert!' . PHP_EOL;
// Befehl ausführen
$stream = ssh2_exec($connection, 'uname -a');
stream_set_blocking($stream, true);
$output = stream_get_contents($stream);
fclose($stream);
echo 'Server-Info: ' . $output;
SFTP-Dateiübertragung nach Passwort-Authentifizierung
<?php
$host = 'example.com';
$port = 22;
$user = 'deploy';
$pass = getenv('SSH_PASSWORD'); // Passwort aus Umgebungsvariable
$connection = ssh2_connect($host, $port);
if (!$connection) {
throw new RuntimeException('Konnte keine SSH-Verbindung herstellen.');
}
if (!ssh2_auth_password($connection, $user, $pass)) {
throw new RuntimeException('SSH-Authentifizierung fehlgeschlagen.');
}
// SFTP-Subsystem starten
$sftp = ssh2_sftp($connection);
if (!$sftp) {
throw new RuntimeException('SFTP-Subsystem konnte nicht gestartet werden.');
}
// Datei hochladen
$localFile = '/tmp/deploy.tar.gz';
$remoteFile = 'ssh2.sftp://' . intval($sftp) . '/var/www/deploy.tar.gz';
if (!file_put_contents($remoteFile, file_get_contents($localFile))) {
throw new RuntimeException('Dateiübertragung fehlgeschlagen.');
}
echo 'Datei erfolgreich übertragen.' . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Passwörter sollten niemals direkt im Quellcode stehen. Nutze stattdessen Umgebungsvariablen (getenv()), eine gesicherte Konfigurationsdatei oder einen Secret-Manager. Wer immer möglich ist, sollte die schlüsselbasierte Authentifizierung mit ssh2_auth_pubkey_file() bevorzugen.
PECL-Erweiterung: Diese Funktion ist Teil der PECL-Erweiterung ssh2 und steht nicht in einer Standard-PHP-Installation zur Verfügung. Installation: pecl install ssh2. Zudem muss libssh2 auf dem System vorhanden sein.
Fehlerbehandlung: Bei fehlgeschlagener Authentifizierung gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Diese lässt sich mit set_error_handler() oder dem @-Operator (nicht empfohlen) unterdrücken. Besser ist das explizite Prüfen des Rückgabewerts.