Wie erzwinge ich, dass der ssh-Client nur die Kennwortauthentifizierung verwendet?

375

Wenn ich die Pubkey-Authentifizierung von zB: einem Ubuntu 11.04 verwende, wie kann ich den SSH-Client so einstellen, dass er nur die Kennwortauthentifizierung für einen Server verwendet? (Wird nur zum Testen von Passwörtern auf einem Server benötigt, auf dem ich mich standardmäßig mit dem Schlüssel anmelde.)

Ich habe einen Weg gefunden:

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

und jetzt werde ich zur Eingabe eines Passworts aufgefordert, aber gibt es offizielle Möglichkeiten?

LanceBaynes
quelle

Antworten:

579

Ich habe das kürzlich auch gebraucht und mir das einfallen lassen:

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

Sie müssen sicherstellen, dass der Client nicht so konfiguriert ist, dass die Kennwortauthentifizierung nicht zulässig ist.

scoopr
quelle
4
Ich musste die Kennworteingabeaufforderung erzwingen, um in einer Umgebung angezeigt zu werden, in der Kerberos für die automatische Authentifizierung verwendet wurde, und ein ähnlicher Befehl funktionierte in dieser speziellen Situation für mich: ssh -o GSSAPIAuthentication=no example.com
IllvilJa
21
Nett. Nur hat -o PubkeyAuthentication=noin meinem Fall gereicht.
Mivk
10
um in einen osx laptop eines freundes zu sshen, musste ich folgendes benutzen: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no stattdessen
guido
4
Das funktioniert bei mir nicht. Es heißt immer wieder: Erlaubnis verweigert (publickey). und bietet nie eine Passwortabfrage.
Reinierpost
7
@reinierpost Das liegt wahrscheinlich daran, dass der SSH- Host deaktiviert wurde PasswordAuthentication. Tatsächlich bin ich hier, weil ich testen wollte, dass das Deaktivieren der Kennwortauthentifizierung auf meinem Host ordnungsgemäß funktioniert hat.
RubberDuck
169

Ich habe zu diesem Zweck eine Verknüpfung entdeckt:

ssh user:@example.com

Beachten Sie den Doppelpunkt ( :) und das leere Kennwort danach.

Halil Özgür
quelle
2
Noch keine Dokumentation. Eigentlich habe ich den OpenSSH-Quellcode erfolglos durchgesehen (seine Analysephase ist ziemlich kryptisch und es ist Morgen hier :)). Meine anfängliche Motivation: Viele Kunden fragen nach einem Passwort, wenn Sie ein leeres Passwort angeben, zBmysql -u user -p
Halil Özgür
43
Das scheint nicht mehr zu funktionieren, zumindest in meinem Fall nicht. sshDer Client hat blindlings versucht, sich mit nicht verbundenen privaten Schlüsseln bei einem neu installierten Server zu authentifizieren, und wurde weiterhin abgelehnt, da die maximale Anzahl von Versuchen erreicht wurde, ohne jemals nach dem Kennwort zu fragen. Um die Kennwortauthentifizierung für diese erste Verbindung zu erzwingen, musste ich die -o PreferredAuthentications=passwordSyntax verwenden, wobei der Doppelpunkt-Trick keinen erkennbaren Effekt hatte. Während es sich also lohnt, diesen Trick auszuprobieren, sollte man sich nicht auf ein konsistentes Verhalten verlassen.
WhiteWinterWolf
2
@ HalilÖzgür: Traurige Nachricht, es war viel einfacher sich zu erinnern und zu tippen;)!
WhiteWinterWolf
3
@Qualcuno, wie WhiteWinterWolf sagte, funktioniert es auf einigen Plattformen leider nicht mehr.
Halil Özgür
2
Stellen Sie sicher, dass Sie kein PasswordAuthentication no in Ihrer ssh_config-Datei haben!
Braiam
32

Neben der von scoopr bereitgestellten Methode können Sie in der Konfigurationsdatei Ihres ssh-Clients Optionen für jeden Host festlegen.

.sshErstellen Sie in Ihrem Verzeichnis eine Datei mit dem Namen config(falls noch nicht vorhanden) und legen Sie die Berechtigungen auf fest 600. Anschließend können Sie Abschnitte erstellen, die mit beginnen

host <some hostname or pattern>

und danach die Optionen pro Host festlegen, z. B.

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

also könntest du haben

host server.to.test
PubkeyAuthentication=no

in dieser Datei und dann einfach

ssh server.to.test

und die Option wird abgeholt.

EightBitTony
quelle
Danke für diese Antwort. Ich habe einen Eintrag in meinem erstellt ~/.ssh/configund hinzugefügtPubkeyAuthentication no
Craig London
2
Funktioniert bei mir nicht.
Reinierpost
11

Ich brauchte dies kürzlich, aber keine der oben genannten Optionen funktionierte. Dies ssh -vzeigte, dass die über den -oSchalter übergebenen Befehlszeilenoptionen durch die in meiner ~/.ssh/configDatei angegebenen Werte überschrieben wurden .

Was funktionierte, war folgendes:

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

Von der sshManpage:

 -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.

Credits to this answer: Wie kann ich dafür sorgen, dass ssh .ssh / config ignoriert?

adeelx
quelle
1
Dies beantwortet die Frage nicht. Sie können die Schlüssel immer im Agenten speichern und Ihre Vorgehensweise wird den Kunden nicht daran hindern, sie zu verwenden.
Jakuje
Hm, wie könnte man dieses Problem so gut beheben wie das, das ich in meiner Antwort erwähnt habe?
Adeelx
2
Auch wenn Sie die Schlüssel im Standardverzeichnis haben (wie in der Frage), werden sie verwendet, unabhängig davon, ob die Konfiguration vorhanden ist oder nicht. Ich würde mit einer der in den ersten Antworten genannten Methoden gehen.
Jakuje
Nicht ganz richtig, ich habe es gerade auf meinem Lubuntu 14.04 ausprobiert und obwohl ich meine Schlüssel am Standardspeicherort habe ~/.ssh/config, werden die Schlüssel nicht verwendet, wenn ich sie spezifiziere -F /dev/null. ssh -vDie Ausgabe hilft in diesem Fall und zeigt deutlich, dass ich, da ich in meiner ssh-Konfiguration einen alles überwindenden Eintrag für habe *, den öffentlichen Schlüssel verwende, anstatt die über den -oSwitch übergebenen Optionen wie in den vorherigen Antworten zu respektieren .
Adeelx
1
Die Standardposition ist ~/.ssh/id_rsaauf der Handbuchseite angegeben. Diese Pfade sind im Client fest codiert. Stellen Sie lediglich sicher, dass Sie beim Testen den richtigen Benutzer angeben.
Jakuje
4

Ich habe ein paar dieser Antworten ausprobiert, aber ssh -vmeine öffentlichen Schlüssel wurden immer wieder aus meinem Home-Verzeichnis gezogen. Die Angabe einer gefälschten Identitätsdatei hat mir jedoch geholfen:

ssh -i /dev/null host

Ich habe diese (permanent tun um den gebrochenen SSH - Server in einem APC Rack-PDU zu arbeiten - bleibt weit von diesen Dingen weg , wenn Sie um die Sicherheit kümmern - so endete ich die Möglichkeit , ich in der Konfigurationsdatei aufstellen:

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

Die Antworten von @scoopr und @Halil Özgür haben bei mir nicht funktioniert.

Das hat bei mir funktioniert:

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

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

shrx
quelle
13
Die Frage bezieht sich auf die Clientauthentifizierung per Kennwort. In dieser Antwort wird überprüft, ob der Hostschlüssel des Servers mit einem in bekannten Hosts übereinstimmt. In der Tat beantwortet es eine andere Frage
Anigel
2

BatchMode=yesStellen Sie außerdem sicher, dass in .ssh / config kein aktiver Ordner vorhanden ist . Ansonsten haben Sie keine Chance, eine interaktive Passwortabfrage zu erhalten.

Gunnar Tiedt
quelle
0

Ich bin vielleicht der einzige auf der Welt mit diesem Problem, aber ich hatte ein sshvon einem anderen Betriebssystem ausgeführtes (choco ssh in Windows in einer Cygwin-Shell) viawhich ssh

Also war die Lösung zu

 /usr/bin/ssh [email protected]

Notieren Sie den vollständigen Pfad. Ich habe das getan, nachdem ich gelaufen warcyg-get openssh

Jonathan
quelle