it-swarm-eu.dev

Ověření na základě klíče SSH: known_hosts vs. autorizované_keys

Četl jsem o nastavení ssh klíčů v Linuxu a mám několik otázek. Oprav mě pokud nemám pravdu…

Řekněme, že hostitel tr-lgto se chce připojit k hostiteli tr-mdm pomocí ssh. Pokud chceme mít jistotu, že se jedná o skutečný tr-mdm, vygenerujeme na tr-mdm pár klíčů a veřejný klíč přidáme do known_hosts na tr-lgto. Pokud chce tr-mdm ověřit, že je to skutečný tr-lgto, pak musí tr-lgto vygenerovat klíčenku a přidat veřejný klíč do authorized_keys na tr-mdm.

Otázka 1: Neexistuje žádné uživatelské pole v souboru known_hosts, pouze IP adresy a názvy hostitelů. tr-mdm může mít mnoho uživatelů, každý s vlastním .ssh složka. Měli bychom přidat veřejný klíč ke každému z known_hosts soubory?

Otázka 2: Zjistil jsem, že ssh-keyscan -t rsa tr-mdm vrátí veřejný klíč tr-mdm. Jak zjistím, k jakému uživateli tento klíč patří? Navíc veřejný klíč v /root/.ssh/ se liší od toho, co tento příkaz vrací. Jak to může být?

21
damluar

Mícháte autentizaci serverového stroje s klientským strojem a autentizaci uživatele na serverovém počítači.

Autentizace serveru

Jednou z prvních věcí, které se stanou při navazování spojení SSH, je to, že server odešle svůj veřejný klíč klientovi a klientovi prokáže (díky kryptografii veřejného klíče ), že zná přiřazený soukromý klíč. Toto ověřuje server: pokud je tato část protokolu úspěšná, klient ví, že server je tím, kdo jej předstírá.

Klient může zkontrolovat, zda je server známý, a ne nějaký nepoctivý server, který se snaží předat jako správný. SSH poskytuje pouze jednoduchý mechanismus pro ověření legitimity serveru: pamatuje si servery, ke kterým jste již připojeni, v ~/.ssh/known_hosts soubor na klientském počítači (existuje také soubor pro celý systém /etc/ssh/known_hosts). Při prvním připojení k serveru je třeba zkontrolovat jiným způsobem, že veřejný klíč představený serverem je skutečně veřejným klíčem serveru, ke kterému se chcete připojit. Pokud máte veřejný klíč serveru, ke kterému se chystáte připojit, můžete jej přidat do ~/.ssh/known_hosts na klientovi ručně.

Ověřování serveru musí být provedeno před odesláním důvěrných dat na něj. Zejména pokud ověření uživatele zahrnuje heslo, nesmí být heslo zasláno na neověřený server.

Ověření uživatele

Server umožňuje vzdálené přihlášení uživatele, pouze pokud tento uživatel prokáže, že má právo přístupu k tomuto účtu. V závislosti na konfiguraci serveru a výběru uživatele může uživatel předložit jednu z několika forem pověření (níže uvedený seznam není vyčerpávající).

  • Uživatel může předložit heslo k účtu, ke kterému se pokouší přihlásit; server poté ověří, zda je heslo správné.
  • Uživatel může předložit veřejný klíč a prokázat, že má soukromý klíč spojený s tímto veřejným klíčem. Toto je přesně stejná metoda, která se používá k ověření serveru, ale nyní se uživatel pokouší prokázat svou totožnost a server je ověřuje. Pokus o přihlášení je přijat, pokud uživatel prokáže, že zná soukromý klíč a veřejný klíč je v seznamu oprávnění účtu (~/.ssh/authorized_keys na serveru).
  • Jiný typ metody zahrnuje delegování části práce ověřování uživatele na klientský počítač. To se děje v kontrolovaných prostředích, jako jsou podniky, když mnoho strojů sdílí stejné účty. Server ověřuje klientský počítač stejným mechanismem, který se používá opačným způsobem, a poté se spoléhá na klienta, aby ověřil uživatele.

Moji přátelé mi dali odpověď. Ve výchozím nastavení identifikuje počítač stroj a ne uživatele. Klíče jsou tedy uloženy v/etc/ssh /. Proto jsem dostal jiný klíč, než ten uložený v /root/.ssh

2
damluar