Voici ma situation: je suis en train de configurer un harnais de test qui va, à partir d’un client central, lancer un certain nombre d’instances de machines virtuelles puis exécuter des commandes via celles-ci ssh
. Les ordinateurs virtuels auront des noms d’hôte et des adresses IP inutilisés, ils ne figureront donc pas dans le ~/.ssh/known_hosts
fichier sur le client central.
Le problème que je rencontre est que la première ssh
commande exécutée sur une nouvelle instance virtuelle génère toujours une invite interactive:
The authenticity of host '[hostname] ([IP address])' can't be established.
RSA key fingerprint is [key fingerprint].
Are you sure you want to continue connecting (yes/no)?
Existe-t-il un moyen de contourner ce problème et de faire en sorte que le nouvel hôte soit déjà connu de la machine client, peut-être en utilisant une clé publique déjà intégrée dans l'image de la machine virtuelle? J'aimerais vraiment éviter de devoir utiliser Expect ou quoi que ce soit pour répondre à l'invite interactive si je le peux.
la source
Réponses:
Définissez l'
StrictHostKeyChecking
option surno
, soit dans le fichier de configuration, soit via-o
:ssh -o StrictHostKeyChecking=no [email protected]
la source
Warning: Permanently added 'hostname,1.2.3.4' (RSA) to the list of known hosts.
Pour éviter l'avertissement, et pour éviter que l'entrée ne soit ajoutée à aucun fichier known_hosts, je fais:ssh -o StrictHostKeyChecking=no -o LogLevel=ERROR -o UserKnownHostsFile=/dev/null [email protected]
OMI, la meilleure façon de faire est la suivante:
Cela garantira qu'il n'y a pas d'entrées en double, que vous êtes couvert à la fois pour le nom d'hôte et l'adresse IP, et que la sortie sera également hachée, une mesure de sécurité supplémentaire.
la source
ssh-keyscan
échouaient pour moi car mon hôte cible ne prend pas en charge le type de clé par défaut de la version 1. L'ajout-t rsa,dsa
à la commande a résolu ce problème.ssh-keygen -F [address]
. medium.com/@wblankenship/…Pour les paresseux:
-H hache le nom d'hôte / adresse IP
la source
Comme mentionné précédemment, l'utilisation de la numérisation au clavier serait le moyen le plus approprié et le plus discret de le faire.
Ce qui précède fera l'affaire pour ajouter un hôte, UNIQUEMENT s'il n'a pas encore été ajouté. Il n’est pas non plus protégé contre la concurrence. vous ne devez pas exécuter l'extrait de code sur le même ordinateur d'origine plus d'une fois à la fois, car le fichier tmp_hosts peut être obstrué, ce qui finit par entraîner un gonflement du fichier known_hosts ...
la source
ssh-keyscan
? La raison en est que cela nécessite du temps et une connexion réseau supplémentaire.cat ~/.ssh/tmp_hosts > ~/.ssh/known_hosts
, mais une modification ultérieure l’a remplacé>>
. L'utilisation>>
est une erreur. Cela va à l'encontre du but de l'unicité dans la première ligne et l'oblige à ajouter de nouvelles entréesknown_hosts
chaque fois qu'il s'exécute. (Nous venons de poster une modification pour la rétablir.)Vous pouvez utiliser la
ssh-keyscan
commande pour récupérer la clé publique et l'ajouter à votreknown_hosts
fichier.la source
Voici comment intégrer ssh-keyscan à votre jeu:
la source
ce serait une solution complète, n'acceptant la clé d'hôte que pour la première fois
la source
J'ai eu un problème similaire et j'ai constaté que certaines des réponses fournies ne m'apportaient qu'une partie du chemin vers une solution automatisée. Voici ce que j'ai fini par utiliser, j'espère que cela aide:
Il ajoute la clé
known_hosts
et ne demande pas le mot de passe.la source
Je recherchais donc un moyen banal de contourner l'interaction manuelle d'un hôte non connue consistant à cloner un dépôt Git, comme indiqué ci-dessous:
Notez l'empreinte de la clé RSA ...
Donc, ceci est une chose SSH, cela fonctionnera pour git sur SSH et seulement les choses liées à SSH en général ...
Tout d’abord, installez nmap sur votre pilote quotidien. nmap est très utile pour certaines tâches, comme la détection des ports ouverts et la vérification manuelle des empreintes SSH. Mais revenons à ce que nous faisons.
Bien. Je suis soit compromis aux multiples endroits et machines que j'ai vérifiées - soit l'explication la plus plausible de tout ce qui est dingue est ce qui se passe.
Cette "empreinte" est simplement une chaîne raccourcie avec un algorithme à sens unique pour plus de commodité, au risque que plusieurs chaînes se résolvent en une même empreinte. Ça arrive, on appelle ça des collisions.
Quoi qu'il en soit, revenons à la chaîne d'origine que nous pouvons voir dans le contexte ci-dessous.
Nous avons donc à l’avance un moyen de demander une forme d’identification à l’hôte original.
À ce stade, nous sommes manuellement aussi vulnérables qu'automatiquement - les chaînes correspondent, nous avons les données de base qui créent l'empreinte, et nous pourrions demander ces données de base (prévention des collisions) à l'avenir.
Maintenant, utilisez cette chaîne de manière à ne pas poser de questions sur l'authenticité d'un hôte ...
Dans ce cas, le fichier known_hosts n'utilise pas d'entrées en texte brut. Vous saurez que les entrées hachées quand vous les verrez, elles ressemblent à des hachages avec des caractères aléatoires au lieu de xyz.com ou 123.45.67.89.
La première ligne de commentaire apparaît avec exagération - mais vous pouvez vous en débarrasser avec une simple redirection via la convention ">" ou ">>".
Comme j'ai fait de mon mieux pour obtenir des données non corrompues pouvant être utilisées pour identifier un "hôte" et une relation de confiance, je vais ajouter cette identification à mon fichier known_hosts dans mon répertoire ~ / .ssh. Puisqu'il sera maintenant identifié en tant qu'hôte connu, je ne recevrai pas l'invite mentionnée ci-dessus lorsque vous étiez jeune.
Merci de rester avec moi, voilà. J'ajoute la clé RSA bitbucket afin de pouvoir interagir avec mes référentiels git de manière non interactive dans le cadre d'un flux de travail CI, mais peu importe ce que vous faites.
Donc, c'est comme ça que vous restez vierge pour aujourd'hui. Vous pouvez faire la même chose avec github en suivant des instructions similaires pendant votre temps libre.
J'ai vu tant de messages de débordement de pile vous demandant d'ajouter par programmation la clé à l'aveuglette, sans vérification. Plus vous vérifiez la clé de différentes machines sur différents réseaux, plus vous pouvez avoir confiance que l'hôte est celui qu'il dit, et c'est ce que vous pouvez espérer de mieux avec cette couche de sécurité.
FAUX
ssh -oStrictHostKeyChecking = pas de nom d'hôte [commande]FAUX
ssh-keyscan -t rsa -H nom_hôte >> ~ / .ssh / connus_hôtesNe faites aucune des choses ci-dessus, s'il vous plaît. Vous avez la possibilité d'augmenter vos chances d'éviter que quelqu'un n'écoute vos transferts de données via un homme au centre de l'attaque - saisissez cette opportunité. La différence est de vérifier littéralement que la clé RSA que vous avez est bien celle du serveur authentique et que vous savez maintenant comment obtenir ces informations pour les comparer afin que vous puissiez faire confiance à la connexion. N'oubliez pas que plus de comparaisons entre différents ordinateurs et réseaux augmenteront généralement votre capacité à faire confiance à la connexion.
la source
Je fais un script à une ligne, un peu long mais utile pour rendre cette tâche pour les hôtes avec plusieurs adresses IP, en utilisant
dig
etbash
la source
Les éléments suivants évitent les entrées en double dans ~ / .ssh / known_hosts:
la source
mkdir -p ~/.ssh/known_hosts;
Comment construisez-vous ces machines? pouvez-vous exécuter un script de mise à jour DNS? pouvez-vous rejoindre un domaine IPA?
FreeIPA le fait automatiquement, mais vous avez essentiellement besoin d’ enregistrements DNS SSHFP et de DNSSEC sur votre zone (freeipa fournit des options configurables (dnssec désactivé par défaut)).
Vous pouvez obtenir les enregistrements SSHFP existants auprès de votre hôte en les exécutant.
ssh-keygen -r jersey.jacobdevans.com
puis une fois publié, vous ajouteriez
VerifyHostKeyDNS yes
à votre ssh_config ou ~ / .ssh / configSi / Quand google décide de basculer sur DNSSEC, vous pouvez entrer sans inviter la clé d’accueil.
ssh jersey.jacobdevans.com
MAIS mon domaine n’est pas encore signé, alors pour le moment, vous verriez ...
la source
Pour le faire correctement, vous voulez vraiment collecter les clés publiques de l'hôte des ordinateurs virtuels lors de leur création et les déposer dans un fichier au
known_hosts
format. Vous pouvez ensuite utiliser la-o GlobalKnownHostsFile=...
touche pointant vers ce fichier pour vous assurer que vous vous connectez à l'hôte auquel vous croyez que vous devriez vous connecter. Cela dépend toutefois de la manière dont vous configurez les machines virtuelles, mais le lire sur le système de fichiers virtuel, si possible, ou même demander à l'hôte d'imprimer le contenu/etc/ssh/ssh_host_rsa_key.pub
pendant la configuration peut faire l'affaire.Cela dit, cela n’en vaut peut-être pas la peine, selon le type d’environnement dans lequel vous travaillez et les adversaires que vous envisagez. Effectuer un simple "stockage lors de la première connexion" (via une analyse ou tout simplement lors de la première "connexion" réelle) comme décrit dans plusieurs autres réponses ci-dessus peut être considérablement plus simple et fournir néanmoins un minimum de sécurité. Cependant, si vous faites cela, je vous suggère fortement de changer le fichier hosts (
-o UserKnownHostsFile=...
) connu de l'utilisateur en un fichier spécifique pour cette installation de test particulière; Cela évitera de polluer votre fichier hôte connu personnel avec des informations de test et facilitera le nettoyage des clés publiques désormais inutiles lorsque vous supprimez vos ordinateurs virtuels.la source
Ce tout
les affaires continuaient à m'agacer alors j'ai opté pour
Un script pour les gouverner tous
Ceci est une variante du script à l' adresse https://askubuntu.com/a/949731/129227 avec la réponse d'Amadu Bah https://serverfault.com/a/858957/162693 .
exemple d'appel
./sshcheck somedomain site1 site2 site3
Le script parcourt les noms de sites et modifie les fichiers .ssh / config et .ssh / known_hosts et effectue ssh-copy-id sur requête - pour la dernière fonctionnalité, l'échec des appels de test ssh la demande de mot de passe.
script sshcheck
la source
Voici comment faire une collection d'hôtes
définir une collection d'hôtes
Ensuite, définissez deux tâches pour ajouter les clés aux hôtes connus:
la source
Le mieux serait de vérifier l'empreinte de chaque nouveau serveur / hôte. C'est le seul moyen d'authentifier le serveur. Sans cela, votre connexion SSH peut être sujette à une attaque de type " man-in-the-middle" .
Si vous êtes vraiment sûr de vouloir ignorer la vérification de l'empreinte digitale, la deuxième meilleure option, moins sécurisée, consiste à utiliser
StrictHostKeyChecking=accept-new
, qui a été introduite dans OpenSSH version 7.6 (2017-10-03) :N'utilisez pas l'ancienne valeur,
StrictHostKeyChecking=no
qui ne vérifie jamais l'authenticité du serveur. (Bien que la signification de ce=no
paramètre soit inversée certaines versions plus tard .)la source