it-swarm.com.de

Putty speichert die Schlüssel nicht, um auf einen Server zuzugreifen, wenn das Skript in hudson ausgeführt wird

Ich musste einen einfachen Automatisierungsprozess schreiben, der einige Dateien von Linux-Server über SSH nach Windows kopierte. Dies kann mit PuTTY erreicht werden.

SSH überprüft als Teil des Protokolls die Identität des Hosts. Wenn Sie nicht wissen, dass sie korrekt ist, werden Sie aufgefordert, die Identität des Hosts zu akzeptieren. Wenn ich den Linux-Server manuell mit PuTTY verbinde, werden keine Informationen aufgefordert, die Identität des Hosts zu akzeptieren. Aber sobald ich diesen Automatisierungsprozess als Zeitplan in Hudson eingesetzt habe. Die genaue Nachricht lautete:

Der Hostschlüssel des Servers wird nicht in der Registrierung zwischengespeichert. Du hast kein Stellen Sie sicher, dass der Server der Computer ist, von dem Sie glauben, dass er es ist. Das Der rsa2-Schlüsselfingerabdruck des Servers lautet: ssh-rsa 1024 cc: 78: 13: a3: 68: a6: 59: 7e: b8: 23: 2d: 13: 3e: 66: 9b: b9 Wenn Sie diesem vertrauen. Host, geben Sie "y" ein, um den Schlüssel zu PuTTYs Cache hinzuzufügen, und fahren Sie fort verbinden. Wenn Sie nur noch eine Verbindung herstellen möchten, ohne Geben Sie den Schlüssel in den Cache ein und geben Sie "n" ein. Wenn Sie diesem Host nicht vertrauen, Drücken Sie die Eingabetaste, um die Verbindung zu beenden. Schlüssel im Cache speichern? (j/n) Verbindung aufgegeben.

Normalerweise würden Sie hier "Y" drücken, vorausgesetzt die Host-Taste ist korrekt, um sie in zukünftigen Verbindungen zu speichern. Die Speicherung davon erfolgt in der Registry unter HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

Leider kann der in Hudson ausgeführte Automatisierungsprozess keine Interaktion durch Drücken der Taste "Y" ausführen, um den Host-Schlüssel im PuTTY-Cache zu speichern. Und ich kann das Problem auch nicht reproduzieren, indem ich einfach den Automatisierungsprozess unter dem Befehl dos durchführe.

Kann jemand das Problem lösen?

32
Charlotte Xu
echo y | pscp -i /path/to/key/file [email protected]:/tmp/file  .
echo y | plink -i /path/to/key/file scripts.sh

es speichert den Fingerabdruck des Host-Schlüssels beim ersten Mal am folgenden Ort und ignoriert das nächste Mal "y"

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
34
Jay

Für interne Server ist der blinde echo y | ...-Trick wahrscheinlich ausreichend (und sehr einfach).

Bei externen Servern, auf die über das Internet zugegriffen wird, ist es jedoch viel sicherer, den Server-Host-Schlüssel einmal zu akzeptieren, anstatt jedes Mal blind zu akzeptieren.


Erstellen Sie eine REG-Datei, die Sie auf den Client-Computern ausführen können.

  • Verbinden Sie sich interaktiv von jedem Rechner aus plink ...
  • Überprüfen Sie und akzeptieren Sie den Host-Schlüssel
  • regedit öffnen
  • Navigiere zu HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  • Klicken Sie mit der rechten Maustaste auf den Eintrag (hat einen Namen wie [email protected]<port>:<address>)
  • Export in eine .reg-Datei

Zwischenspeichern des Host-Schlüssels auf Client-Computern

  • Führen Sie die REG-Datei auf jedem Client-Computer aus, der eine Verbindung zu diesem Server herstellen soll
  • Stellen Sie sicher, dass Sie sich mit dem Benutzerkonto anmelden, das plink ausführt (d. H., Falls es sich um ein Dienstkonto handelt).
16
Clay

Dieses Problem hatte ich auch bei der Verwendung eines Batch-Schedulers, der das lokale Systemkonto verwendet. Mit diesem Konto können Sie sich nicht anmelden, um den Host-Schlüssel zu akzeptieren, oder den HKEY_CURRENT_USER-Wert manuell festlegen ..

HKEY_USERS\.DEFAULT\Software\SimonTatham\PuTTY\SshHostkeys

und das Hinzufügen des Host-String-Werts, der hier für das lokale Systemkonto vorgenommen wurde.

15
Toby Vinnell

Ab dem 9. September 2014 können Sie mit der entsprechenden Version von plink (getestet mit plink 0.66) die Option -hostkey verwenden, wie hier dokumentiert:

http://www.chiark.greenend.org.uk/~sgtatham/PuTTY/wishlist/accept-Host-keys.html

Verwenden des Schlüssels in der ursprünglichen Frage:

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 [email protected] 

Ich habe erfolgreich "-hostkey" in meinen Skripts verwendet, um das anfängliche Host-Schlüsselproblem zu umgehen.

"-hostkey" ist auch für die Arbeit mit pscp (Version 0.66) dokumentiert.

Beachten Sie, dass Sie den Hostkey ändern müssen, wenn Sie Hosts ändern oder der SSD-Server den Schlüssel neu berechnet.

8
Stephen Rondeau
echo y | plink -ssh <[email protected]> -pw <password> exit
plink -ssh <[email protected]> -pw <password> [yourcommand]

Erläuterung: Bei Verwendung von Echo to Pipe gibt der Benutzer 'y' für den ausgewählten Befehl ein und beendet dann .. .. Die nächste Anweisung ruft dann die ausführbare Plink-Datei auf, um den Befehl auszuführen.

5
Sumit Gupta

Ich hatte dieses Problem, als ich Bazaar verwendet habe und meinen SSH-Client manuell auf PuTTY eingestellt habe, anstatt auf das eingebaute Paramiko, und ich bekam genau das gleiche Problem, bei dem er sagte, der Schlüssel sei nicht im "Bekannte Hosts" und die Frage, ob ich das überprüfen soll, aber weil es von einem anderen Programm und nicht in einem normalen Terminal ausgeführt wird, wurde es sofort beendet. 

Wenn Sie können, führen Sie einfach PuTTY aus und stellen Sie eine manuelle Verbindung zum Server her, um den öffentlichen Schlüssel ssh in der Registrierung zu speichern. Wenn das automatisierte Programm versucht, eine Verbindung herzustellen, wird die Option y/n nicht angezeigt.

Oder Sie können ein kleines Python3-Skript verwenden, das ich geschrieben habe, um zwischen den beiden bekannten Host-Formaten, die PuTTY und openssh verwenden, zu konvertieren: https://github.com/mgrandi/openssh-PuTTY-knownhost-converter

`

4
mgrandi

Führen Sie im Admin-Modus von Windows PowerShell aus

pscp -i /path/to/private_key source_file [email protected]:/home/location

Lösung über Code: PuTTY/plink kompilieren, um ssh-Schlüssel automatisch zu akzeptieren und zu speichern

Sie werden aufgefordert, SSH-Host-Schlüssel im Cache zu speichern. Da das Benutzerkonto den Plink nicht mit dem Host in der Registrierung ausführt, hängt er, weil er auf eine Antwort wartet (Ja/Nein ...).
Wenn Sie dies über Code lösen möchten, rufen Sie den PuTTY-Quellcode ab, nehmen Sie Änderungen vor, kompilieren Sie und verwenden Sie die neue Plink-Binärdatei, die den SSH-Hostschlüssel ohne die Eingabeaufforderung speichert.
Wie es geht ? Für Windows mache ich Folgendes: 

  • Laden Sie den neuesten PuTTY-Quellcode von folgender Website herunter: https://www.chiark.greenend.org.uk/~sgtatham/PuTTY/latest.html
    (Suchen Sie nach dem Abschnitt "Quellcode" und laden Sie "Windows-Quellarchiv" herunter.)
    Attention: Um PuTTY-Quellcode mit Visual Studio zu öffnen, müssen Sie eine release-Version herunterladen. Wenn Sie sich für ein bestimmtes Commit (oder einen bestimmten Kopf) auschecken, sind die Visual Studio-Lösungsdateien seitdem nicht vorhanden Sie werden während des Builds erstellt.
    Entnommen aus: PuTTY, Plink oder Pscp kann unter Windows nicht kompiliert werden, da Windows/MSVC-Unterverzeichnis fehlt

  • Der Quellcode muss aktualisiert werden. Was wir ändern möchten, finden Sie in der Funktion verify_ssh_Host_key (..) in "wincons.c". Wir möchten den Teil des Codes, der zur Eingabe von Ja/Nein auffordert, auskommentieren und nur den Schlüssel Start speichern mit auskommentieren Sie den Prompt-Code:

    /*hin = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(hin, &savemode);
    SetConsoleMode(hin, (savemode | ENABLE_ECHO_INPUT |
             ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT));
    ReadFile(hin, line, sizeof(line) - 1, &i, NULL);
    SetConsoleMode(hin, savemode);
    
    if (line[0] != '\0' && line[0] != '\r' && line[0] != '\n') {
    if (line[0] == 'y' || line[0] == 'Y')
    store_Host_key(Host, port, keytype, keystr);
    return 1;
    } else {
      fprintf(stderr, abandoned);
      return 0;
    }*/  
    

Fügen Sie stattdessen die folgenden Zeilen hinzu (Code, der für das Speichern des Host-Schlüssels verantwortlich ist): 

store_Host_key(Host, port, keytype, keystr);
return 1;

Kompilieren Sie die Lösung und nehmen Sie plink/pscp .. Sie können ohne Prompt weiter. Sie akzeptieren den ssh-Host-Schlüssel und speichern ihn in der Registrierung.

0
ilansch