it-swarm-eu.dev

Je možné použít ssh přihlašování pomocí soukromého klíče i hesla?

Zdá se, že se vzájemně vylučují, protože jeden z nich mi dává druhého a naopak. Dvoufaktorový auth pro mé ssh servery zní opravdu pěkně, takže existuje nějaký způsob, jak toho dosáhnout?

56
chrisdotcode

S nejnovějšími verzemi Fedora a RHEL 6 můžete použít RequiredAuthentications2 pubkey,password vyžadovat ověřování heslem pubkey i . Obvykle se to vyžaduje, aby se vyžadoval autentizační token pubkey a dvoufaktorový, nikoli heslo uživatele.

Aktualizace: Nyní na RHEL/CentOS 7 a na jakémkoli systému s nejnovější verzí OpenSSH můžete použít:

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

Je také možné použít vyloučení IP pomocí direktivy Match nebo Users.

48
mricon

Na stejném serveru můžete mít autentizaci pomocí veřejného klíče i hesla. Pokud se ověření pomocí veřejného klíče nezdaří, přejde k ověření pomocí hesla.

Pokud jde o vyžadování obou, zdá se to hloupé a kontraproduktivní a kontrola man sshd_config není možné to udělat.

Váš soukromý klíč ssh by měl mít zabezpečené přístupové heslo. Pokud tedy útočník získá váš soukromý klíč, nemůže nic udělat, aniž by nejprve získal vaši přístupovou frázi. Pokud tuto přístupovou frázi kompromitovali (s největší pravděpodobností pomocí keyloggeru nebo od brutálního nucení extrémně slabé přístupové fráze), mohou triviálně také chytit/brutální silou zapamatovat heslo.

Pokud opravdu chcete, můžete něco nastavit pomocí příkazu ForceCommand (např. Povolit pouze ověřování pomocí veřejného klíče a poté uživatele nasměrovat do prostředí Shell, které vyžaduje heslo). To nedoporučuji.

Lepší alternativou, pokud chcete omezit expozici, je nastavení brány firewall pro omezení IP, které mohou dosáhnout portu ssh; pravděpodobně s další sítí VPN spuštěnou někde na serveru, pokud budete někdy potřebovat tunel z jiného počítače. Můžete také použít něco jako knockd k otevření díry ve firewallu po určitém vzoru klepání na port, i když si uvědomte, že kdokoli, kdo odposlouchává provoz, může přehrát klepání a otevřít port.

18
dr jimbob

(křížové účtování SO odpověď s aktualizovaným řešením těchto dnů)

Pokud si přečtete manuálovou stránku pro sshd_config(5), existuje možnost AuthenticationMethods, která vezme seznam metod, které musíte před udělením přístupu předat. Požadované nastavení je:

AuthenticationMethods publickey,password

Tato metoda by měla fungovat se všemi současnými systémy Linux s nejnovějšími openssh (openssh-6, openssh-7).

Starší systémy

Jedinou výjimkou, o které vím, je RHEL 6 (openssh-5.3), která vyžaduje nastavení jiné možnosti se stejnými hodnotami (jak je popsáno v jiné odpovědi):

RequiredAuthentications2 publickey,password
12
Jakuje

Trochu jsem se na to podíval a přišel s následujícími.

Můžete použít PAM pro dvoufaktorovou autentizaci, ale přitom nebudete používat klíče SSH, budete používat odlišné dva faktory.

Můžete například použít google s jejich dvoufaktorovým ověřením a použít pam k ověření, jak je popsáno na

http://www.techrepublic.com/blog/opensource/two-factor-ssh-authentication-via-google-secures-linux-logins/2607

4
Phillip Nordwall

Jediným řešením, které pro mě fungovalo, je mít to, co následuje v/etc/ssh/sshd_config (testováno s CentOS7):

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

Což znamená povolit PAM, povolit všechny řádky, které se týkají klíče veřejné, a konečně mít AuthenticationMethods správně vypsat obě metody. Vezměte prosím na vědomí, že navzdory tomu, co bylo napsal Jakuje , neměli byste mezi publickey a heslo za AuthenticationMethods přidat čárku.

2