====== SFTP mit SSH-Key-Authentifizierung ======
Folgende Voraussetzungen müssen erfüllt sein:
- Die PHP-Erweiterung "ssh2" muss installiert worden sein
- Der Private-Key muss im Format "RSA PRIVATE KEY" zur Verfügung stehen
- 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:
- Download der benötigen DLL unter https://github.com/nufue/pecl-ssh2-windows
- "php_ssh2.dll" in das PHP-Ext-Verzeichnis (z. B. "E:\xampp\php\ext") kopieren
- "php.ini" wie folgt ergänzen: "extension=php_ssh2.dll"
- 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 =====
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 );
}
}
}