Existe-t-il un moyen d'accepter automatiquement les clés de l'hôte SSH, même lorsque les clés sont modifiées, dans PuTTY?

6

Nous utilisons des logiciels qui vont SSH sur plusieurs machines et faire quelque chose. Le problème est dans notre laboratoire de test, les machines virtuelles sont très souvent renouvelées (détruites et recréées), de sorte que le logiciel traitera la machine virtuelle comme nouvelle, ce qui est le cas, et échouera car l'authenticité de l'hôte ne peut pas Soyez établis. On m'a dit d'entrer manuellement PuTTY et d'accepter la clé de l'hôte, et après le logiciel sera heureux.

Faire cela avec quelques centaines de machines virtuelles n'est pas amusant.

Je souhaite donc savoir s'il existe un outil de commande que je peux automatiser pour accepter la clé de l'hôte pour PuTTY. Nous sommes dans un laboratoire fermé, donc je ne suis pas trop inquiet pour la sécurité.

Je sais qu'il existe des solutions pour l'environnement Linux, mais celui-ci est Windows.

Spock
la source
3
Pourquoi ne pas créer la machine virtuelle avec une clé déjà définie que vous avez acceptée?
Paul
Sans entrer dans la politique, la réponse courte est non. Je n'ai aucun contrôle sur comment / ce que les vm sont créés. Mais merci d'avoir répondu.
Spock
HI @Spock - Je vois ci-dessous que vous indiquez que le libellé de la question ne correspond plus à ce que vous souhaitez faire. Cela se produit parfois lorsque nous essayons de clarifier la question, mais nous vous invitons à la corriger et à la corriger afin d'éviter des réponses moins utiles. Donc, la chose ssh que vous utilisez utilise le même registre que putty pour lire les clés de l'hôte? Ce logiciel interne est-il adapté du mastic?
Paul
@Paul. Bonjour et oui, il s'agit d'une application développée en interne dont je ne connais pas le fonctionnement interne (et désolé, je ne connais pas trop les certificats / clés SSH et la manière dont le registre est utilisé). Tout ce que je sais, c'est après que j'accepte les clés / cert à l'aide de mastic et que l'application fonctionne pour ce serveur / vm. Et merci d'avoir répondu.
Spock
1
Hmm. Si vous vous connectez à un hôte avec pscp en mode de traitement par lots, la clé de l'hôte s'affiche et échoue. Il s'agirait alors d'exécuter cette opération sur tous les hôtes en tant que tâche de traitement par lots, en obtenant les clés, puis en les ajoutant au registre. Comment est votre script?
Paul le

Réponses:

7

@Paul ci-dessus a suggéré d'utiliser pscp. Cela fonctionne très bien, est super simple et totalement scriptable:

 C:\> echo y | pscp.exe -l user -pw password -ls 192.168.0.1:/
Spock
la source
5

Sur leur site officiel, les développeurs ont clairement indiqué qu'une telle fonctionnalité ne serait pas disponible dans PuTTY (souligné par moi):

Une option pour accepter automatiquement toutes les clés d’hôte SSH. Pour une raison quelconque, beaucoup de gens semblent penser que ce serait une fonctionnalité vraiment utile. Je suis sûr que ce serait très pratique, mais au détriment de la sécurité! L’intérêt des clés d’hôte est qu’elles constituent la seule garantie que votre connexion n’a pas été piratée par un attaquant actif entre vous et le serveur, et que vos données ne sont pas déchiffrées par l’attaquant ni redécryptées. . Si vous souhaitez planifier un travail par lots automatisé pour utiliser PSCP ou Plink, et que l'invite de clé d'hôte interactive rend cette tâche difficile, ajoutez la clé d'hôte correcte au registre à l'avance. (Mise à jour, 2014-09-09: ou si le registre n'est pas disponible, vous pouvez utiliser la nouvelle option -hostkey pour spécifier la clé ou l'empreinte digitale droite sur la ligne de commande.Nous n'accepterons pas l'option de ligne de commande permettant de désactiver la vérification de la clé de l'hôte, quel que soit le nombre de personnes ayant déjà effectué le travail, et de nous envoyer des correctifs de qualité production.

Si des clés d’hôte sont disponibles dans le format commun «known_hosts», nous avons un script pour les convertir en un fichier .REG Windows qui peut être installé à l’avance en double-cliquant sur.

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

Donc, malheureusement, PuTTY ne peut y parvenir sans une intervention de l'utilisateur.

Spokey
la source
1
Merci d'avoir répondu. En fait, ma question initiale ne concernait pas spécifiquement PuTTY, mais a été modifiée à quelques reprises par d'autres pour sonner de cette façon. Nous utilisons ce logiciel, si le certificat n'est pas déjà accepté, il échouera. J'utilise donc PuTTY pour accepter manuellement le certificat. Ce que je recherche, c’est que tous les logiciels Windows capables de le faire. J'ai été sur Google, mais j'ai échoué. J'ai donc pensé que quelqu'un rencontrait peut-être un problème similaire et avait une solution à ce problème. Je suis tout à fait au courant de, comprend et accepte la position du fabricant de PuTTY sur la sécurité.
Spock
-1

J'ai rencontré le même problème en écrivant un script PowerShell pour interagir avec Kitty afin de sauvegarder toutes nos configurations de commutateur. J'ai trouvé un post sur un forum différent d'un gars qui tente d'interagir avec le programme de calculateur Microsoft. Mon programme attend essentiellement que la fenêtre Accepter la clé RSA s'ouvre puis envoie la clé y. Voici le message que j'ai trouvé: Fournir des entrées aux applications avec PowerShell

Jake
la source
-1

Je sais que c’est un vieux post, mais c’est peut-être une façon d’utiliser Powershell avec pscp et de garder un peu de sécurité. C'est toujours un script inachevé, pas complètement testé, mais peut-être à sens unique ...

$storeddevicehostkeypath = "C:\temp\_hostkeys\keyfile.tmp"
pscp -batch -v [email protected]:validatekey dummy2validatekey  2>&1  | tee -Variable allOutput | out-null
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
$hostkey = ([regex]"(?>ssh-[a-zA-Z0-9]{1,9}) (?>[0-9]{3,4}) ((?>[0-9a-f]{2}:){15}[0-9a-f]{2})").match("$stderr").Groups[1].value


"Validate if hostkey changed or already known"
if (test-path $storeddevicehostkeypath) {
    if ($hostkey -eq (gc $storeddevicehostkeypath)) {"Hostkey has not changed since last login"} else {"NO ACCESS GRANTED because of security rule! Hostkey has changed!"; exit 2}
} else {
    "hostkey not stored unter $storeddevicehostkeypath - creating new file"
    $hostkey | out-file -FilePath "$storeddevicehostkeypath"
}


"Trying to connect with hostkey $hostkey"
pscp -batch -hostkey $hostkey -v [email protected]:sys back  2>&1  | tee -Variable allOutput | out-null
$allOutput[-1].ToString()

Comme déjà mentionné - pas complètement testé et inachevé

An-Dir
la source