N'ajoutez pas hostkey à known_hosts pour SSH

111

Je souhaite me connecter à un hôte via SSH mais je ne souhaite pas que le nom d’hôte soit ajouté à mon nom de fichier ~/.ssh/known_hosts.

Comment puis je faire ça?

Albert
la source

Réponses:

99
-o "UserKnownHostsFile /dev/null"

devrait marcher.

Albert
la source
3
Fonctionne comme prévu, mais le résultat sera toujours le suivant: "Avertissement: Ajout permanent de 'hostname, ip' (RSA) à la liste des hôtes connus". J'ai fait ça partir avec: 2> & 1 | grep -v "^Warning: Permanently added"
Guillaume Boudreau
3
add -o "LogLevel ERROR" et il ne se plaindra plus d'avertissements
John,
1
Remarque: une demande de suppression de ce message "Avertissement: Ajout permanent de 'nom d'hôte, ip' (RSA) à la liste des hôtes connus". a été signalé aux mainteneurs: bugzilla.mindrot.org/show_bug.cgi?id=2413
Ben Creasy
2
La tuyauterie à grepfusionner stdout et stderr; aussi le statut de sortie peut changer. En cas d' utilisation bash, il sera préférable d'utiliser la substitution de processus pour se débarrasser du message: ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]. Cela évitera le tuyau et donc les changements correspondants dans la gestion du statut de sortie.
Alex O
1
@ John Il est préférable d'utiliser l'une des autres méthodes dans ces commentaires, sinon vous introduisez une faille de sécurité en raison du potentiel de masquage d'autres avertissements non liés
Jon Bentley
99

Si vous voulez ce comportement parce que vous travaillez avec des serveurs de cloud (AWS EC2, Rackspace CloudServers, etc.) ou que vous fournissez constamment de nouvelles images dans Vagrant, vous pouvez mettre à jour votre configuration SSH au lieu d’ajouter des alias bash ou davantage d’options à la place. ligne de commande.

Pensez à ajouter quelque chose comme:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET
  • Utilisez aussi stricte que regex pour hôte que possible pour être sécurisé.
  • Régler le LogLevel sur QUIET gardera l’Avertissement mentionné par Guillaume de ne pas apparaître
cclark
la source
Vous devriez vraiment essayer de ne pas désactiver complètement StrictHostKeyChecking. La réponse de cclark est donc un excellent compromis pour travailler avec des serveurs cloud.
Alex Recarey
Cela m’a beaucoup aidé à utiliser Shipit (un outil de déploiement de JavaScript) contre Vagrant. Je ne pouvais pas facilement obtenir les paramètres que Shipit transmettait à SSH, ce qui m'a permis de contourner l'outil et de lui dire ce que je faisais et que je ne voulais pas qu'il se souvienne.
John Munsch
1
LogLevel est ce que je cherchais. Il présente l’avantage supplémentaire de ne pas afficher la notification configurée par la société lors de l’exécution de scripts! (Je cours maintenant avec loglevel ERROR)
Anshu Prateek
Dans quel fichier est-ce que j'ajoute ceci?
Wim Deblauwe
Ceci est votre fichier de configuration SSH. Sous Linux ou macOS, le fichier se trouverait généralement dans un répertoire appelé .ssh de votre répertoire personnel, nommé config - ~ / .ssh / config
cclark
8

J'ai l'impression d'ajouter la clé de l'hôte à votre unknown_hosts (les personnes qui exécutent ces services sont, au moins, assez intelligentes pour que leurs clés d'hôte restent cohérentes entre les ordinateurs desservant le même nom d'hôte), puis d'activer StrictHostKeyChecking, de désactiver CheckHostIP et de la journalisation avec LogLevel ERROR vous donnera la meilleure expérience sans sacrifier la sécurité. (Ok, sans CheckHostIP, vous devez faire confiance à DNS, qui est un énorme trou béant sans DNSSEC répandu ou quelque chose de similaire; mais nous allons simplement balayer cela sous le tapis pour le moment.)

J'utilise un fichier known_hosts en lecture seule, je dois donc faire quelque chose ou je reçois des avertissements sans fin sur l'impossibilité d'ajouter des entrées à known_hosts.

Ce que j'utilise:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR

J'aimerais que ces services publient leurs clés d'hôte SSH sur leurs sites Web via HTTPS, afin de pouvoir les copier explicitement sans avoir à me connecter au préalable et potentiellement s'exposer à une attaque par MITM.

Kyle Rose
la source
7

Pour une seule session SSH, utilisez cette

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
Quanlong
la source
4
Cela n'ajoute rien de nouveau à une réponse acceptée sur une question âgée de 5 ans.
JakeGould
5

je suggère

LogLevel ERROR

plus de

LogLevel QUIET

de sorte que vous obtenez toujours "Impossible de résoudre le nom d'hôte" et d'autres erreurs de ce type

kiloforce
la source
vous devriez pouvoir faire confiance à vos connexions SSH, à mon humble avis. Ne vous contentez pas de faire taire vos risques.
Sylvainulg
3
Cela dépend vraiment. Nous avons des environnements de développement qui sont détruits chaque semaine et reconstruits, leurs enregistrements A restent les mêmes mais leur clé d’hôte est générée chaque fois qu’elle est construite. Nous ne pouvons pas conserver les clés de l'hôte, car l'enregistrement A est défini dans une base de données basée sur un nom d'environnement et les noms d'environnement peuvent être supprimés ou de nouveaux noms créés à tout moment. La solution de contournement ci-dessus est donc réellement utile.
Alex Berry
2

Avez-vous essayé de désactiver StrictHostKeyChecking? Vous pouvez le faire avec l' -ooption ou dans le fichier de configuration ~/.ssh/config.

jneves
la source
J'utilise déjà ça. Mais cela a un effet différent: cela réduit la rigueur de la vérification de la clé de l'hôte. Par exemple, lorsque l'hôte est inconnu, il se connecte toujours lorsque vous désactivez cette option. Ainsi, il enregistre toujours l'hôte. Mais je pense avoir trouvé la bonne solution (voir ma réponse).
Albert
0

J'ai trouvé les entrées .ssh / config suivantes utiles (LAN avec DHCP et DNS):

 CheckHostIP no

 Host *.*
 CheckHostIP yes

Le résultat est que les noms de machines locales "zora" ou "goron" ne seront pas comparés aux adresses IP attribuées de manière dynamique, mais www.mycompany.com ou node42.planetlab.com verront toujours leurs adresses IP statiques confirmées.

Sylvainulg
la source