Putty ne cache pas les clés pour accéder à un serveur quand il exécute script dans hudson

j'avais un processus d'automatisation simple à écrire qui nécessitait de copier quelques fichiers du serveur linux vers windows via SSH. Cela peut être accompli en utilisant le mastic.

SSH, dans le cadre du protocole, vérifie l'identité de l'hôte et si pas connus pour être correct, vous invite à accepter l'identité de l'hôte. Quand je connecte manuellement le serveur linux avec putty , cela ne demande aucune information pour accepter l'identité de l'hôte. Mais une fois que j'ai mis ce processus d'automatisation dans Hudson comme emploi du temps. Le message exact était:

la clé hôte du serveur n'est pas mise en cache dans le registre. Vous n'avez aucun garantie que le serveur est l'ordinateur que vous pensez qu'elle est. Le l'empreinte de la clé rsa2 du serveur est: ssh-rsa 1024 cc: 78: 13: a3: 68: a6: 59: 7e:b8:23:2d:13:3e:66:9b: b9 si vous faites confiance à ce host, entrez "y" pour ajouter la clé au cache de PuTTY et continuer relier. Si vous voulez continuer à vous connecter une seule fois, sans ajouter la clé au cache, entrez "n". Si vous ne faites pas confiance à cet hôte, appuyez sur Retour pour abandonner la connexion. Stocker la clé dans la cache? (y/n) Connexion abandonnée.

habituellement, vous appuyez sur" Y " ici, en supposant que la clé hôte est correcte, afin de la stocker dans une connexion future. Le stockage de ceci va dans le Registre sous HKEY_CURRENT_USERSoftwareSimontathPuttySshHostKeys

mais malheureusement, le processus d'automatisation en cours à Hudson ne peut pas faire interaction par la touche " Y " pour stocker la clé de l'hôte dans putty cache. Et je ne peux pas non plus reproduire le problème en exécutant simplement le processus d'automatisation sous la commande dos.

personne Ne sait comment résoudre le problème?

27
demandé sur Toon Krijthe 2012-11-28 10:19:31

9 réponses

echo y | pscp -i /path/to/key/file user@remote:/tmp/file  .
echo y | plink -i /path/to/key/file scripts.sh

il stockera l'empreinte digitale de la clé hôte à l'endroit suivant la première fois, et ignorera "y" la prochaine fois

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
31
répondu Jay 2012-11-29 01:54:06

pour les serveurs internes, le truc aveugle echo y | ... est probablement adéquat (et super simple).

Cependant, pour les serveurs externes auxquels on accède sur internet, il est beaucoup plus sûr d'accepter la clé serveur une fois plutôt que d'accepter aveuglément chaque fois.


Créer un .le fichier reg que vous pouvez exécuter sur la machine client(s).

  • connexion interactive à partir de n'importe quelle machine plink ...
  • vérifier et accepter la clé hôte
  • Ouvrir regedit
  • naviguez vers HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  • faites un clic droit sur l'entrée (aura un nom comme rsa2@<port>:<address> )
  • l'Exportation .fichier reg

Cache la clé host sur la(Les) machine (s) client

  • Exécuter le .fichier reg sur n'importe quel client machine qui va se connecter à ce serveur
  • assurez-vous de vous connecter en utilisant le compte utilisateur qui sera lancé plink (c.-à-d. dans le cas où il s'agit d'un compte de service)
13
répondu Clay 2013-12-11 16:03:30

j'ai également eu ce problème en utilisant un programmeur de lot qui utilise le compte de système Local. Avec ce compte, vous ne pouvez pas vous connecter pour accepter la clé host ou régler manuellement la valeur HKEY_CURRENT_USER . J'ai trouvé que la création de la clé suivante:

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

et ajouter la valeur de la chaîne hôte fonctionnait ici pour le compte système Local.

13
répondu Toby Vinnell 2014-07-22 15:35:46

depuis le 9 Septembre 2014 avec la version correspondante de plink (testé avec plink 0.66), vous pouvez utiliser l'option-hostkey, comme documenté ici:

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

en utilisant la clé de la question originale:

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 user@remote 

j'ai utilisé avec succès"- hostkey " dans mes scripts pour contourner le problème d'interrogation de la clé hôte initiale.

"-clef" est également documentée de travailler avec pscp (version 0.66).

Notez que vous devez changer la clef si vous changez d'hébergeur, ou le serveur sshd recalcule la clé.

7
répondu Stephen Rondeau 2015-12-02 18:38:02
echo y | plink -ssh <username@remotemachine> -pw <password> exit
plink -ssh <username@remotemachine> -pw <password> [yourcommand]

explication: en utilisant echo to pipe, l'utilisateur entre 'y' dans la commande sélectionnée puis sort. La prochaine instruction invoquera alors l'exécutable plink une seconde fois pour exécuter votre commande.

4
répondu Sumit Gupta 2013-08-29 13:20:46

j'ai eu ce problème en utilisant Bazaar , et réglage manuel de mon client ssh pour être mastic plutôt que le construit en paramiko, et je recevais le même problème exact, où il essayait de dire que la clé n'était pas dans les 'hôtes connus' et en demandant si je devrais le vérifier, mais en raison de lui étant exécuté par un programme différent et pas dans un terminal normal il est juste sorti immédiatement.

si vous le pouvez, Lancez putty et connectez-vous au serveur manuellement pour l'obtenir pour sauvegarder la clé publique ssh dans le registre de sorte que lorsque le programme automatisé tente de se connecter il ne sera pas présenté avec l'option y/n.

ou vous pouvez utiliser un petit script python3 que j'ai écrit pour convertir entre les deux formats 'host connus' qui utilisent putty et openssh: https://github.com/mgrandi/openssh-putty-knownhost-converter

"

4
répondu mgrandi 2014-04-01 23:32:53

Solution via le Code: Compiler mastic/plink à l'acceptation automatique et de stocker les clés ssh

vous êtes invité à stocker les clés de l'hôte SSH dans le cache, puisque le compte d'utilisateur exécute le plugin n'a pas l'hôte dans le registre, il est suspendu, parce qu'il attend la réponse (oui/non..).

Si vous voulez résoudre cela via le code, obtenir putty code source, faire quelques modifications, compiler , et utiliser le nouveau Plink binaire-celui qui stocke la clé de l'hôte SSH sans invite.

Comment faire ? Pour windows, je fais ce qui suit:

  • télécharger le dernier code source putty à partir de: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

    (Rechercher la section "code Source" et télécharger" Windows Source archive")

    Attention : pour ouvrir du code source putty avec Visual Studio, vous devez télécharger une version "release , si vous effectuez un paiement à un commit (ou une tête) spécifique, les fichiers de la solution Visual Studio n'existeront pas puisqu'ils sont créés pendant la construction.

    Tiré de: ne peut pas compiler PuTTY, Plink ou Pscp sur Windows en raison de la disparition du sous-répertoire Windows/MSVC

  • le code Source doit être mis à jour, ce que nous voulons changer est situé à la fonction verify_ssh_host_key(..) dans "wincons.c", nous voulons commenter la partie du code qui invite pour oui / non et juste stocker la clé, commencer par Commenter le code prompt:

    /*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] != '"151900920"' && 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;
    }*/  
    

Continuer en ajoutant les lignes suivantes à la place (code qui permet de stocker la clé hôte):

store_host_key(host, port, keytype, keystr);
return 1;

compiler la solution et prendre plink/pscp.. vous êtes bon pour aller sans prompt, il accepte la clé de l'hôte ssh et stocker puis dans le registre.

0
répondu ilansch 2017-08-16 09:56:57

Exécuter en Mode Administrateur de Windows PowerShell

pscp -i /path/to/private_key source_file user@ip:/home/location
0
répondu Shivanand THANGALAPALLI 2018-06-16 07:41:39

il avait bien fonctionné avec

pscp file user@dest: 

mais j'ai eu la même erreur. Alors j'ai fait:

pscp -l USERNAME -pw PASSWORD FILE 10.1.1.1:

et ça a fait l'affaire pour moi.

-1
répondu Nick 2018-07-02 17:02:43