Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:sftp_key

SFTP mit SSH-Key-Authentifizierung

Folgende Voraussetzungen müssen erfüllt sein:

  1. Die PHP-Erweiterung „ssh2“ muss installiert worden sein
  2. Der Private-Key muss im Format „RSA PRIVATE KEY“ zur Verfügung stehen
  3. Der Public-Key muss zur Verfügung stehen

PHP-Erweiterung "ssh2" unter Windows-Xampp installieren

Das folgende Beispiel zeigt, wie die Erweiterung unter Xampp für Windows installiert wird:

  1. Download der benötigen DLL unter https://github.com/nufue/pecl-ssh2-windows
  2. „php_ssh2.dll“ in das PHP-Ext-Verzeichnis (z. B. „E:\xampp\php\ext“) kopieren
  3. „php.ini“ wie folgt ergänzen: „extension=php_ssh2.dll“
  4. Apache neu starten

Private Key im RSA-Format

Für die Authentifizierung durch PHP muss der Private Key mit folgender Zeile beginnen, da ein OPENSSH PRIVATE KEY von PHP nicht akzeptiert wird:

-----BEGIN RSA PRIVATE KEY-----

Ein solcher Key kann auf einem Linux-Betriebssystem mit der folgenden Anweisung erstellt werden:

ssh-keygen -m PEM -t rsa -f id_rsa

SFTP-Beispiel-Klasse

sftp.php
class SFTP
{
    private $resource = false;
 
    public function connect( $host, $port = 22 )
    {
        $this->resource = ssh2_connect( $host, $port, [ 'hostkey'=>'ssh-rsa' ] );
    }
 
    public function auth( $username, $privKey )
    {
        if( $this->resource )
        {
            ssh2_auth_pubkey_file( $this->resource, $username, $privKey . '.pub', $privKey );
        }
    }
 
    public function sendFile( $file, $filename  )
    {
        if( $this->resource )
        {
            ssh2_scp_send( $this->resource, $file, $filename, 0644 );
        }
    }
}
php/sftp_key.txt · Zuletzt geändert: 2021/10/06 15:44 von webproducer