[Fli4l_dev] ssh-login mit public/private key - file format error beim private key file

Hans Bachner hans at bachner.priv.at
Di Dez 10 00:21:35 CET 2019


Hallo Peter,

danke für deine Hinweise - mir scheinen allerdings nicht alle 
zutreffend, ich lass mich aber gerne belehren.

Ich nehme einmal dein P.S. vorweg:
> P.S.: ich empfehle einfach mal den Code in rc460.dropbear zu lesen und zu
> verstehen ;)
Genau das hab ich die letzten Tage schon getan, sonst wär ich erst gar 
nicht so weit gekommen.

Mehr direkt bei deinen Vorschlägen.

Peter Schiefer schrieb am 09.12.2019 um 21:07:
> Hallo Alex, Hallo Hans,
> 
> Am Sun, 8 Dec 2019 21:45:58 -0800 (PST) schrieb lespocky at gmail.com:
> 
>>> SSHD_PUBLIC_KEYFILE_x wird anscheinend falsch interpretiert.
> 
> funktioniert hier wie erwartet - Datei liegt in <mein
> configdir>/etc/ssh/mein_pub_key.pub und in
> SSHD_PUBLIC_KEYFILE_1='mein_pub_key.pub'

Sinngemäß sieht es auch bei mir aus. Die .pub-Datei wird ja auch korrekt 
zum fli4l übertragen.

> in der Datei /etc/rc.d/rc460.dopbear ist zu erkennen, das ene der folgende
> Bedingungen für das PUBLIC_KEYFILE zutreffen müssen, damit der Inhalt in
> die /.ssh/authorized_keys übernommen wird:
> - grep -q -E "^(ssh-[rd]s[as]|ecdsa-sha2-[^[:space:]]+) "
> - grep -q "SSH2 PUBLIC KEY
Letzeres steht auch in der ersten Zeile meines .pub Files. Ich komme 
daher in den Block

>         then
>             keytype=ssh-rsa
>             grep -q "dsa-key" /etc/ssh/$kfn && keytype=ssh-dss
>             echo "$keytype `sed -e 's/^----.*$//g' -e 's/^Comment.*$//g' -e 's/^\n//g' -e 's/^[ ]*$//g' /etc/ssh/$kfn|tr -d '\012'`" >> authorized_keys
>         fi

Hier werden offenbar nur Keys des Typs ssh-rsa und sh-dss berücksichtigt.

Welchen Key-Typ verwendest du?

Ich verwende - wie hierthreads bereits erwähnt - einen Schlüssel des 
Typs ecdsa-sha2-nistp256 (so stehts jedenfalls am Beginn der Zeile in 
PuTTYgen). Ist das eine dritte Kategorie oder eine Unterkategorie der 
beiden im Script verwendeten? Ich tippe eher auf ersteres - nicht 
umsonst hat der direkt als SSHD_PUBLIC_KEY übertragen den Präfix 
"ecdsa-sha2-nistp256".

Zudem scheint mir der grep-Befehl im zitierten Block etwas großzügig; 
eigentlich sollte er vor dem Suchen eine eventuell vorhandene "Comment:" 
Zeile ausblenden. Ich hab da z.B. stehen:
> Comment: "ecdsa-key-fli at home"
um meine Keys leichter auseinanderhalten zu können.

>>>>> Wenn ich in mkfli4 fürs Remote Update den privaten Schlüssel (.ppk)
>>>>> eintrage, erhalte ich beim SCP die Meldung:
>>>>>> Unable to load private key file "<kompletter Pfad zum .ppk>" (file format error)
>>>>> und werde nach dem Passwort gefragt.
> 
> das Programm pscp.exe das durch mkfli4l aufgerufen wird erwartet nicht das
> binäre ppk Format sondern das PEM Format das so aussieht:
> -----BEGIN RSA PRIVATE KEY-----
> ....
> ....
> ....
> -----END RSA PRIVATE KEY-----

Da pscp.exe (und plink.exe) aus dem sshd-Paket von PuTTY kommen, würde 
es mich doch sehr wundern, wenn dieses Programm keine .ppk Files 
verstehen würde.

Ich habe es auf der Befehlszeile auch getestet (mit pscp -v) und 
festgestellt, dass das im Prinzip auch einwandfrei funktioniert.

ABER: die mit fli4l mitgelieferten pscp.exe und plink.exe stammen von 
PuTTY v0.62 (aus dem Jahr 2013). Diese Version unterstützt halt das 
ecdsa Verfahren noch nicht und bemängelt daher einen "file format error".

Mit dem aktuellen v0.73 pscp wird der .ppk anstandslos akzeptiert. Dass 
trotz altem pscp die Authentifizierung über den Pageant funktionierte, 
liegt daran, dass der auf meinem Rechner eben auch in der aktuellen 
Version läuft und ecdsa "versteht".

>>>>
>>>> Mit mkfli4l unter Windows kenne ich mich nicht aus, aber offenbar
>>>> erwartet er hier den private Key im PuTTY-Format.
> 
> Nein im PEM-Format.

Nicht unbedingt, siehe oben.

>>>> Hast Du mal versucht den nicht da einzutragen sondern mit pageant zu
>>>> laden? Das ist der SSH-Agent von PuTTY, damit brauch man nicht ständig
>>>> sein Passwort neu eingeben und dann auch in PuTTY o.ä. nicht extra eine
>>>> .ppk-Datei angeben.
> 
> wenn der Parameter nicht belegt ist, wird pscp.exe ohne den Parameter -i
> aufgerufen, worauf dann Passwort-Authentifizierung durchgeführt wird.

danke für die Bestätigung, das habe ich vermutet.

>>>> Unable to load private key file "<kompletter Pfad und Dateiname>"  (file format error)
> 
> bitte den Privaten Key in einr Datei im PEM-Format verwenden!

Ich hab ja sogar versucht, in PuTTYgen mit Conversions --> export 
ssh.com key eine .pem Datei zu erzeugen - ist mir leider (noch) nicht 
gelungen ("unable to save key file").

>> Das sieht mir irgendwie nach einem Problem mit mkfli4l unter Windows aus. Da kann ich weiter nichts zu sagen.
> 
> mit mkfli4l hat das _nichts_ zu tun sondern mit dem Format, das PCSP.exe
> erwartet!

Stimmt, mit mkfli4l hat es nichts bzw. nur indirekt zu tun. Die 
mitgelieferte PSCP-Version ist einfach zu alt für ecdsa Keays.

>>> Das scheint daran zu liegen, dass der im .pub File übertragene Schlüssel
>>> auf dem fli4l in authorized_keys falsch eingetragen wird.
> 
> siehe rc460.dropbear - die Inhalte des Files wird via cat direkt angehängt
> wenn eine der Bedingungen (siehe weiter oben) zutrifft.

Nicht ganz. Der Inhalt des Files ist ja der reine Schlüssel - für die 
authorized_keys wird noch der Schlüsseltyp vorangestellt.

>>>> flitest 4.0.0-r55209-testing # cat /.ssh/authorized_keys
>>>> ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoY[...]QSbVkaWO4A= ecdsa-key-fli at home
> 
> das die Zeile aus der Variable
> 
>>>> ssh-dss AAAAE2VjZHNhLXNoY[...]QSbVkaWO4A=
> 
> und das der Inhalt der Datei

Yup. Nur stimmt anscheinend der von rc460.dropbear generierte Präfix 
(keytype) nicht.

> Gruß Peter

Danke + schöne Grüße,
Hans.


Mehr Informationen über die Mailingliste Fli4l_dev