====== 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 ); } } }