Frage

Ich versuche, Call ssh-keygen mit einer Variablen durch bash als eine Eingabe statt einer Datei einen Fingerabdruck eines öffentlichen Schlüssels zu erhalten. Ich bin mir bewusst, dass ich eine temporäre Datei um dieses Problem zu umgehen, verwenden könnte, aber aus Gründen außerhalb des Geltungsbereichs dieser Frage, ich will nicht.

Diese Methode funktioniert nicht Arbeit wie er sagt, die Schlüsseldatei ungültig ist (es richtig ist sicher)

echo $pubkey | ssh-keygen -lf /dev/stdin

Das hat Arbeit, sondern eine Variable nicht verwendet, sondern eine Datei aus.

ssh-keygen -lf alpha.pub

Das hat Arbeit, sondern eine Variable nicht verwendet, sondern eine umgeleiteten Datei.

ssh-keygen -lf /dev/stdin < alpha.pub

Dies gilt nicht Arbeit, weil ich eine mehrdeutige Redirect bekommen

ssh-keygen -lf /dev/stdin < $(echo $pubkey)

Ich würde zu schätzen, einen Einblick, wie ssh-keygen erhalten aus einer Variablen mit einem öffentlichen Schlüssel zu lesen und, wenn möglich, eine Erklärung, warum die Umleitungen nicht tun, was ich denke, sie tun sollten. In bestimmten, warum die | anders als die < verhält und warum das dritte Beispiel ist eine ambiguous redirect. Ich suchte online, aber viele der Umleitungs-Tutorials schien nicht meine Fragen zu beantworten.

War es hilfreich?

Lösung

echo $pubkey | ssh-keygen -lf /dev/stdin
/dev/stdin is not a public key file.

/ dev / stdin ist eigentlich eine Unix-Leitung, keine reguläre Datei, so ssh-keygen die Datei nicht geöffnet

ssh-keygen -lf /dev/stdin  <<<$key
1024 92:6a:3f:5c:1f:78:.....

/ dev / stdin bezieht sich auf eine reguläre Datei, erstellt durch einen Bash heredoc verwenden. Sie können dies überprüfen:

# ls -l /dev/stdin <<<$pubkey
lrwxrwxrwx 1 root root 15 Feb 11 08:07 /dev/stdin -> /proc/self/fd/0
# ls -l /proc/self/fd/0 <<<$pubkey
lr-x------ 1 juergen juergen 64 Apr 14 13:31 /proc/self/fd/0 -> /tmp/sh-thd-1271250023 (deleted)

Andere Tipps

Seit Version 7.2 (veröffentlicht am am 2016.02.28) ist dies nun möglich, durch - als Dateinamen übergeben. Von dem Release Notes:

  
      
  • SSH-keygen (1): Gestatten von der Standardeingabe von Fingerabdrücken, z.B. ssh-keygen -lf -
  •   

Wenn Sie eine Zeichenfolge als stdin umleiten möchten, verwenden Sie die folgende Syntax:

cmd <<< "some $STR here"

Wenn Sie die Ausgabe eines Befehls umleiten möchten, als ob es sich um eine Datei war, tun Sie es wie folgt aus:

cmd <( /bin/somecmd )

Und wenn Sie einen Befehl als eine Ausgabedatei verwenden mögen, es ist mehr oder weniger das gleiche:

cmd >( /bin/othercmd )

Hier ist ein Einzeiler mit der Datei /dev/stdin wie in anderen Antworten beschrieben.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Beachten Sie, dass diese mit privaten Schlüssel brechen, die ein Passwort verwenden. Es wird von AWS oder Openstack mit pem Dateien erzeugt arbeiten, welche Passwörter nicht verwenden.

Ich würde empfehlen, eine temporäre Datei. Das Problem ist, dass Umleiten, BASH eine Datei erwartet. Durch die Verwendung von $ (echo $ pubkey), bash wird sich beschweren, weil, wenn es mit der Substitution getan hat, ist es für eine Datei dieses Namens aussehen wird, dass die Substitution erstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top