Kurze Anleitung wie in C# mit Renci.SshNet eine SFTP Verbindung mittels Key File hergestellt werden kann und eine Lösung des Fehlers „Invalid private key file“
Allgemein
Um eine SFTP Verbindung mit Renci.SshNet und einem KeyFile herzustellen, kann wie folgt vorgegangen werden:
string host = ConfigurationManager.AppSettings["SFTP.Server"]; string username = ConfigurationManager.AppSettings["SFTP.Username"]; string password = ConfigurationManager.AppSettings["SFTP.Password"]; int port = Convert.ToInt32(ConfigurationManager.AppSettings["SFTP.Port"]); string remoteDirectory = ConfigurationManager.AppSettings["SFTP.Server.FolderName"]; string keyFile = ConfigurationManager.AppSettings["SFTP.KeyFile"]; string keyFilePassPhrase = ConfigurationManager.AppSettings["SFTP.KeyFile.PassPhrase"]; var keyFiles = new[] { new PrivateKeyFile(keyFile, keyFilePassPhrase) }; var methods = new List<AuthenticationMethod>(); methods.Add(new PrivateKeyAuthenticationMethod(userName, keyFiles)); var conInfo = new ConnectionInfo(host, port, userName, methods.ToArray()); var sftpClient = new SftpClient(conInfo); sftpClient.Connect();
Fehlermeldung: Renci.SshNet.Common.SshException: ‚Invalid private key file.‘
Renci.SshNet erlaubt nur RSA, DSA Private Key Files im OpenSSH oder ssh.com Format.
Der Dateiaufbau muss ähnlich diesem gekürzten und ungültigem Beispiel aussehen:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,25136DC257291XXX kYdAPl36kkPYO6XNhZvM6v9dtD80BpwarKXLZOw/u+Mka/dukTMhK0H0II0cejh4 j6XFn9WmEPjm54S181qc+NtcWg3/ypNBUKcWMGDmFxZN0iwT++qDxkwk4uAWyCbW kYdAPl36kkPYO6XNhZvM6v9dtD80BpwarZZLZOw/u+Mka/dukTMhK0H0II0cejh4 j6XFn9WmEPjm54S181qc+NtcWg3/ypNBUKcWMGDmFxZN0iwTaaqDxkwk4uAWyCbW kYdAPl36kkPYO6XNhZvM6v9dtD80BpwarKXLZOw/u+Mka/dukTMhK0H0II0cejh4 j6XFn9WmEPjm54S181qc+NtcWg3/ypNBUKcWMGDmFxZN0iwTxxqDxkwk4uAWyCbW kYdAPl36kkPYO6XNhZvM6v9dtD80BpwarKXLZOw/u+Mka/dukTMhK0H0II0cejh4 j6XFn9WmEPjm54S181qc+NtcWg3/ypNBUKcWMGDmFxZN0iwT++qDxkwk4uAWyCbW kYdAPl36kkPYO6XNhZvM6v9dtD80BpwarKXLZOw/u+Mka/dukTMhK0H0II0cejh4 j6XFn9WmEPjm54S181qc+NtcWg3/ypNBUKcWMGDmFxZN0iwT++qDxkwk4uAWyCbW -----END RSA PRIVATE KEY-----
Handelt es sich hingegen um ein Putty PPK File, ähnlich diesem gekürzten und ungültigem Beispiel, dann muss die Datei umkonvertiert werden:
PuTTY-User-Key-File-2: ssh-rsa Encryption: aes256-cbc Comment: Mein_Kommentar Public-Lines: 12 3ElxFaALJEnNv1LDz8VkBkxCgFLuAolMlvoHvNh3V0rLgCr+2BspsXhqjo1+yL15 WQzrNSfhlKnYYDLNk2iWVqVmJPaFSWLdGpMrIcE+DkRMIobvnmULC02h0+gfDW0H meTwhUc= 3ElxFaALJEnNv1LDz8VkBkxCgFLuAolMlvoHvNh3V0rLgCr+2BspsXhqjo1+yL15 WQzrNSfhlKnYYDLNk2iWVqVmJPaFSWLdGpMrIcE+DkRMIobvnmULC02h0+gfDW0H Private-Lines: 28 QBVb5fiFq8dUhds/H6E9Ss6OvXLyCEGBpT/OxLmnizYme1mkxHEsOOQsTFkjoO5x Ol6XbEHXUXlSVuzuOAfkIJspp4VbmHE47Ewj2FHJFeJLFnVGwkwsunoMQsreGzLp mfC17Ry9SDrrzZ8yakcldnbgnskoHKqWd0ESmw5o36z+orLzZy/s3PX4znbO7cQh 1mQ13GyrP48dEqeQYx/39Q== Private-MAC: ddaabb391cec7a9bb99994af666f8f106ffffce3
Mit Hilfe von WinSCP und Putty, kann das File ganz einfach umkonvertieren werden. In WinSCP sind dazu nur folgende Schritte nötig:
- WinSCP öffnen
- Werkzeuge > PuTTY Gen öffnen
- Load – Button > File auswählen
- Coverversion >Export Open SSH Key
- Speichern
Das erzeugte File kann dann in Renci.SshNet verwendet werden!
Quellen
- StackOverflow – Does SSH.NET accept only OpenSSH format of private key? If not, what are the restrictions?
- Duplicati.com – Problems Setting up SFTP Storage Type – Invalid Private Key
Alle Angaben ohne Gewähr