Comment forcer le client ssh à n'utiliser que l'authentification par mot de passe?

375

Si j'utilise l'authentification pubkey, par exemple, sous: Ubuntu 11.04, comment puis-je configurer le client ssh pour qu'il utilise uniquement l'authentification par mot de passe sur un serveur? (juste nécessaire à cause du test des mots de passe sur un serveur, où je me connecte par défaut avec la clé)

J'ai trouvé un moyen:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

et maintenant on me demande un mot de passe, mais y a-t-il des moyens officiels?

LanceBaynes
la source

Réponses:

580

J'ai récemment eu besoin de ça aussi, et j'ai trouvé ça:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Vous devez vous assurer que le client n'est pas configuré pour interdire l'authentification par mot de passe.

scoopr
la source
4
J'avais besoin d'imposer l'invite du mot de passe pour apparaître dans un environnement où Kerberos était utilisé pour l'authentification automatisée, et une commande similaire fonctionnait pour moi dans cette situation spécifique: ssh -o GSSAPIAuthentication=no example.com
IllvilJa
21
Agréable. Seulement -o PubkeyAuthentication=noétait suffisant dans mon cas.
mardi
10
ssh dans un ordinateur portable osx ami, je devais utiliser: à la -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no place
guido
4
Cela ne marche pas pour moi. Il continue à dire: Permission refusée (publickey). et ne propose jamais une invite de mot de passe.
Reinierpost
7
@reinierpost c'est probablement parce que l' hôte ssh a été désactivé PasswordAuthentication. En fait, je suis ici parce que je voulais vérifier que la désactivation de l'authentification par mot de passe fonctionnait correctement sur mon hôte.
RubberDuck
169

J'ai découvert un raccourci à cet effet:

ssh user:@example.com

Notez les deux points ( :) et le mot de passe vide après.

Halil Özgür
la source
2
Aucune documentation pour le moment. En fait, j'ai feuilleté le code source OpenSSH en vain (son étape d'analyse est plutôt cryptique et c'est le matin ici :)). Ma motivation initiale: de nombreux clients demandent un mot de passe si vous donnez un mot de passe vide, par exemplemysql -u user -p
Halil Özgür
43
Cela ne semble plus fonctionner, du moins pas dans mon cas. sshLe client essayait à l'aveuglette de s'authentifier auprès d'un serveur nouvellement installé à l'aide de clés privées non liées, mais le nombre maximal de tentatives atteintes sans demander le mot de passe est rejeté. Afin de forcer l'authentification par mot de passe pour cette première connexion, je devais utiliser la -o PreferredAuthentications=passwordsyntaxe, le tour du côlon n'ayant aucun effet notable. Donc, bien que cette astuce vaille la peine d’être essayée, il ne faut pas en faire un comportement constant.
WhiteWinterWolf
2
@ HalilÖzgür: Triste nouvelle, il était beaucoup plus facile de se souvenir et de taper;)!
WhiteWinterWolf
3
@Qualcuno, comme l'a dit WhiteWinterWolf, malheureusement, cela ne fonctionne plus sur certaines plates-formes.
Halil Özgür
2
Assurez-vous de ne pas avoir PasswordAuthentication no sur votre fichier ssh_config!
Braiam
32

En plus de la méthode publiée par scoopr, vous pouvez définir des options par hôte dans votre fichier de configuration du client ssh.

Dans votre .sshrépertoire, créez un fichier appelé config(s'il n'existe pas déjà) et définissez les autorisations sur 600, vous pouvez ensuite créer des sections qui commencent par

host <some hostname or pattern>

puis définissez les options par hôte après, par exemple,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

afin que vous puissiez avoir

host server.to.test
PubkeyAuthentication=no

dans ce fichier, puis simplement

ssh server.to.test

et l'option sera ramassé.

EightBitTony
la source
Merci pour cette réponse. J'ai créé une entrée dans mon ~/.ssh/configet ajoutéPubkeyAuthentication no
Craig London le
2
Ca ne marche pas pour moi
Reinierpost
11

J'avais récemment besoin de cela, mais aucune des options ci-dessus ne fonctionnait, cela ssh -vmontrait que les options de ligne de commande passées via le -ocommutateur étaient écrasées par les valeurs spécifiées dans mon ~/.ssh/configfichier.

Ce qui a fonctionné était ceci:

ssh -F /dev/null <username>@<host>

De la sshpage de manuel:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Crédits à cette réponse: Comment puis-je faire en sorte que ssh ignore .ssh / config?

Adeelx
la source
1
cela ne répond pas à la question. Vous pouvez toujours avoir les clés stockées dans l'agent et votre approche n'empêchera pas le client de les utiliser.
Jakuje
Hm, comment remédier à ce problème ainsi que celui que j'ai mentionné dans ma réponse?
Adeelx
2
De plus, si vous avez les clés à l'emplacement standard (comme dans la question), elles seront utilisées que la configuration soit présente ou non. J'irais avec l'une des méthodes mentionnées dans les premières réponses.
Jakuje
Pas tout à fait vrai, je viens de le tester sur mon Lubuntu 14.04 et même si j'ai mes clés à l'emplacement standard ~/.ssh/config, elles ne sont pas utilisées si je le spécifie -F /dev/null. ssh -vLa sortie aide dans ce cas, elle montre clairement que, comme j'ai une entrée fourre-tout dans ma configuration ssh *, elle choisit d'utiliser la clé publique plutôt que de respecter les options transmises via le -ocommutateur, comme dans les réponses précédentes.
Adeelx
1
L'emplacement standard est ~/.ssh/id_rsaindiqué dans la page de manuel. Ces chemins sont codés en dur dans le client. Assurez-vous simplement de fournir le bon utilisateur lors du test.
Jakuje
4

J'ai essayé quelques-unes de ces réponses, mais ssh -vj'ai continué à montrer mes clés publiques extraites de mon répertoire personnel. Cependant, spécifier un fichier d'identité fictif m'a fait l'affaire:

ssh -i /dev/null host

Je dois le faire de manière permanente (pour contourner le serveur SSH défectueux dans une PDU montée en rack APC - éloignez - vous de ces éléments si vous vous souciez de la sécurité - alors j'ai fini par mettre l'option dans mon fichier de configuration:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null
miken32
la source
2

Les réponses de @scoopr et de Halil Özgür n'ont pas fonctionné pour moi.

Cela a fonctionné pour moi:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Source: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

rauque
la source
13
La question concerne l’authentification du client par mot de passe. Cette réponse consiste à vérifier si la clé d’hôte du serveur correspond à une des hôtes connus. En effet, il répond à une question différente
Anigel
2

Et aussi, soyez sûr qu’il n’ya pas d’ BatchMode=yesactif dans .ssh / config. Sinon, vous n'avez aucune chance d'obtenir une invite de mot de passe interactive.

Gunnar Tiedt
la source
0

Je suis peut-être le seul au monde à ce problème, mais un de mes sshsystèmes d’exploitation en cours d’exécution (choco ssh sous Windows dans un shell cygwin) est affiché viawhich ssh

Donc la solution était de

 /usr/bin/ssh [email protected]

Notez le chemin complet. Je l'ai fait après avoir courucyg-get openssh

Jonathan
la source