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?
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
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)
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.
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é.
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.
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
"
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.
Exécuter en Mode Administrateur de Windows PowerShell
pscp -i /path/to/private_key source_file user@ip:/home/location
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.