È possibile utilizzare l'autenticazione della chiave privata e della password per l'accesso ssh?

47

Sembra che si escludano a vicenda, dato che disabilitare uno mi dà l'altro e viceversa. L'autenticazione a due fattori per i miei server ssh sembra davvero bella, quindi c'è un modo per farlo?

    
posta chrisdotcode 31.07.2012 - 19:46
fonte

5 risposte

43

Con le recenti versioni di Fedora e RHEL 6, puoi utilizzare RequiredAuthentications2 pubkey,password per richiedere l'autenticazione della password e di pubkey. Di solito questo è necessario per richiedere token di autenticazione a 2 fattori e pubkey, non la password dell'utente.

Aggiornamento: ora su RHEL / CentOS 7, e su qualsiasi sistema con una versione recente di OpenSSH, puoi usare:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

È anche possibile utilizzare la direttiva Abbina per escludere IP o Utenti.

    
risposta data 30.12.2012 - 14:58
fonte
16

È possibile avere l'autenticazione della chiave pubblica e della password sullo stesso server. Se l'autenticazione della chiave pubblica non riesce, verrà eseguita l'autenticazione della password.

Come richiedere entrambi, sembra sciocco e controproducente, e controllando man sshd_config non c'è un'opzione per farlo.

La tua chiave privata ssh dovrebbe avere una passphrase sicura. Quindi, se un utente malintenzionato ottiene la tua chiave privata, non può ancora fare nulla senza prima ottenere la passphrase. Se hanno compromesso la passphrase (molto probabilmente con un keylogger, o da una forzatura brutale di una passphrase estremamente debole) possono banalmente anche afferrare / forzare con forza qualsiasi password memorizzata.

Se vuoi davvero, puoi configurare qualcosa con say ForceCommand (ad esempio, solo consentire l'autenticazione a chiave pubblica e quindi indirizzare l'utente a una shell che richiede una password). Non lo consiglio.

Un'alternativa migliore se vuoi limitare l'esposizione, è avere una configurazione del firewall per limitare gli IP che possono raggiungere la porta ssh; possibilmente con una VPN aggiuntiva in esecuzione su un server da qualche parte se potrebbe essere necessario eseguire il tunnel da un altro computer ad un certo punto. Puoi anche usare qualcosa come knockd per aprire un buco in un firewall dopo un particolare pattern di knock-out, sebbene riconosca che chiunque intercettazioni sul traffico potrebbero riprodurre lo schema di battito per aprire una porta.

    
risposta data 31.07.2012 - 20:30
fonte
11

(cross posting SO answer con una soluzione aggiornata a questi giorni)

Se leggi la pagina di manuale per sshd_config(5) , c'è l'opzione AuthenticationMethods , che prende l'elenco dei metodi che devi passare prima che ti venga concesso l'accesso. La configurazione richiesta è:

AuthenticationMethods publickey,password

Questo metodo dovrebbe funzionare con tutti i sistemi Linux correnti con recenti openssh (openssh-6, openssh-7).

Sistemi precedenti

L'unica eccezione che conosco è RHEL 6 (openssh-5.3), che richiede l'impostazione di un'opzione diversa con gli stessi valori (come descritto nell'altra risposta):

RequiredAuthentications2 publickey,password
    
risposta data 22.09.2015 - 18:27
fonte
4

Ho esaminato questo aspetto un po 'di più e ho trovato il seguente.

Potresti usare PAM per l'autenticazione a due fattori, ma in questo modo non utilizzerai le chiavi SSH perché utilizzerai due fattori diversi.

Ad esempio, puoi utilizzare google con l'autenticazione a due fattori e utilizzare pam per l'autenticazione, come descritto in

link

    
risposta data 31.07.2012 - 21:18
fonte
0

L'unica soluzione che ha funzionato per me è avere quanto segue in / etc / ssh / sshd_config (testato con CentOS7):

PubkeyAuthentication yes 
AuthenticationMethods publickey password
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes 
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

Che significa avere PAM abilitato, abilitare tutte le linee che riguardano la chiave publik e, infine, disporre di AuthenticationMethods che elenca correttamente entrambi i metodi. Tieni presente che, nonostante ciò che era scritto da Jakuje , non devi aggiungere una virgola tra publickey e password dopo AuthenticationMethods.

    
risposta data 05.06.2018 - 10:55
fonte

Leggi altre domande sui tag