Come forzare il client ssh a usare solo la password auth?


375

Se uso pubkey auth da es: un Ubuntu 11.04 come posso impostare il client ssh per usare solo password auth su un server? (necessario solo a causa del test delle password su un server, in cui eseguo l'accesso predefinito con chiave)

Ho trovato un modo:

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

e ora mi viene richiesta la password, ma ci sono modi ufficiali?

Risposte:


579

Di recente ne ho avuto bisogno anche io, e ho pensato a questo:

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

È necessario assicurarsi che il client non sia configurato per non consentire l'autenticazione con password.


4
Avevo bisogno di imporre la richiesta della password per apparire in un ambiente in cui Kerberos veniva usato per l'autenticazione automatizzata e un comando simile funzionava per me in quella situazione specifica: ssh -o GSSAPIAuthentication=no example.com
IllvilJa

21
Bello. Solo è -o PubkeyAuthentication=nostato sufficiente nel mio caso.
mivk,

10
per ssh in un amico laptop osx, ho dovuto usare: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no invece
guido

4
Questo non funziona per me. Continua a dire: permesso negato (chiave pubblica). e non offre mai una richiesta di password.
reinierpost,

7
@reinierpost probabilmente perché l' host ssh è disabilitato PasswordAuthentication. In effetti, sono qui perché volevo testare che la disabilitazione dell'autorizzazione della password funzionava correttamente sul mio host.
RubberDuck,

169

Ho scoperto una scorciatoia per questo scopo:

ssh user:@example.com

Nota i due punti ( :) e la password vuota dopo di essa.


2
Nessuna documentazione ancora. In realtà, ho sfogliato il codice sorgente OpenSSH senza alcun risultato (la sua fase di analisi è piuttosto criptica ed è mattina qui :)). La mia motivazione iniziale: molti clienti richiedono una password se si immette una password vuota, ad esempiomysql -u user -p
Halil Özgür

43
Questo non sembra funzionare più, almeno non nel mio caso. sshil client stava provando ciecamente chiavi private non correlate per autenticarsi su un server appena installato e continuare a essere rifiutato a causa del numero massimo di tentativi raggiunto senza mai richiedere la password. Per forzare l'autenticazione della password per questa prima connessione, ho dovuto usare la -o PreferredAuthentications=passwordsintassi, il trucco dei due punti non ha alcun effetto evidente. Quindi, sebbene possa valere la pena provare questo trucco, non si dovrebbe fare affidamento su di esso come comportamento coerente.
WhiteWinterWolf

2
@ HalilÖzgür: notizie tristi, è stato molto più facile da ricordare e da scrivere;)!
WhiteWinterWolf

3
@Qualcuno come ha detto WhiteWinterWolf, purtroppo non funziona più su alcune piattaforme.
Halil Özgür,

2
Assicurati di non avere PasswordAuthentication no nel tuo file ssh_config!
Braiam,

32

Oltre al metodo pubblicato da scoopr, è possibile impostare le opzioni per host nel file di configurazione del client ssh.

Nella tua .sshdirectory, crea un file chiamato config(se non esiste già) e imposta le autorizzazioni su 600, puoi quindi creare sezioni che iniziano con

host <some hostname or pattern>

e quindi impostare le opzioni per host dopo, ad esempio,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

così potresti avere

host server.to.test
PubkeyAuthentication=no

in quel file e poi semplicemente

ssh server.to.test

e l'opzione verrà ritirata.


Grazie per questa risposta Ho creato una voce nella mia ~/.ssh/confige ho aggiuntoPubkeyAuthentication no
Craig London,

2
Non funziona per me.
reinierpost,

11

Di recente ho avuto bisogno di questo, ma nessuna delle opzioni sopra ha funzionato, ha ssh -vdimostrato che le opzioni della riga di comando passate tramite l'opzione -oerano sovrascritte dai valori specificati nel mio ~/.ssh/configfile.

Ciò che ha funzionato è stato questo:

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

Dalla sshpagina man:

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

Riconoscimenti per questa risposta: come posso fare in modo che ssh ignori .ssh / config?


1
questo non risponde alla domanda. Puoi sempre avere le chiavi memorizzate nell'agente e il tuo approccio non impedirà al client di usarle.
Jakuje,

Hm, come sarebbe un rimedio che problema così come quella che ho citato nella mia risposta?
adeelx,

2
Inoltre, se hai le chiavi in ​​posizione standard (come nella domanda), verranno utilizzate indipendentemente dalla configurazione presente o meno. Vorrei andare con uno dei metodi menzionati nelle prime risposte.
Jakuje,

Non del tutto vero, l'ho appena testato sul mio Lubuntu 14.04 e anche se ho le mie chiavi nella posizione standard ~/.ssh/config, le chiavi non vengono utilizzate se lo specifico -F /dev/null. ssh -vl'output aiuta in questo caso, mostra chiaramente che, poiché ho una voce generale nella mia configurazione ssh *, sceglie di usare la chiave pubblica piuttosto che rispettare le opzioni passate tramite l' -ointerruttore come nelle risposte precedenti.
adeelx,

1
La posizione standard è ~/.ssh/id_rsaquella indicata nella pagina del manuale. Questi percorsi sono codificati nel client. Assicurati di fornire l'utente corretto durante il test.
Jakuje,

4

Ho provato alcune di queste risposte, ma ssh -vcontinuavo a mostrare che le mie chiavi pubbliche venivano estratte dalla mia directory home. Tuttavia, specificare un file di identità fasullo mi ha dato il trucco:

ssh -i /dev/null host

Devo farlo in modo permanente (per aggirare il server SSH rotto in una PDU montata su rack APC - stare lontano da queste cose se ti interessa la sicurezza - quindi ho finito per mettere l'opzione nel mio file di configurazione:

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

2

Le risposte di @scoopr e @Halil Özgür non hanno funzionato per me.

Questo ha funzionato per me:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

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


13
La domanda riguarda l'autenticazione client tramite password. Questa risposta riguarda il controllo se la chiave host del server corrisponde a una in host noti. In effetti sta rispondendo a una domanda diversa
Anigel,

2

Inoltre, BatchMode=yesin .ssh / config non è attivo. Altrimenti non hai alcuna possibilità di ottenere una richiesta di password interattiva.


0

Potrei essere l'unico al mondo con questo problema, ma avevo un sshaltro sistema operativo in esecuzione (choco ssh in Windows in una shell Cygwin) visto tramitewhich ssh

Quindi la soluzione era

 /usr/bin/ssh user@example.com

Nota il percorso completo. L'ho fatto dopo aver corsocyg-get openssh

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.