Secure Shell (SSH)
je client-server protokol, sloužící k přihlášení ke vzdálenému systému. První verze SSH protokolu je stará více jak 20 let. Prostřednictívm SSH lze vytvořit zabezpečené připojení ke zválenému systému prostřednictvím nezabepečené sítě (Internet). Bezpečnost přenosu je založena na asymetrické kryptografii – private/public key.
Shodné algoritmy
Aby mohlo být spojení mezi klientem a systémem navázáno musí se jednotlivé strany domluvit na algoritmu, kterým budu přenášená data kryptovat. Zde může nastav problém. Strany se snaží nalézt algoritmus, který budu vyhovovat oběma stranám. Důvod je prostý. Pokud by tak neučinili, a vysílací strana by data kryptovala algoritmem, který by přijímací strana neznala nemohla by data přečíst – dekryptovat.
Může nastat situace, že se stany nedomluví. To bývá typické, pro situace, kdy je jedna ze stran generačně zastaralá, případně nabízí omezený list algoritmů – např. WiFi routery, NAS zařízení, Switche… Spojení pak nelze navázat.
Můžeme se pak setkat s takovouto chybou – no matching host key type found:
1 2 |
[23:02:32]:radim@Radims-MacBook-Pro.local :~ $ ssh radim@10.1.5.254 Unable to negotiate with 10.1.5.1 port 22: no matching host key type found. Their offer: ssh-dss |
Situaci lze vyřešit vynucením šifrovacího algoritmu na straně klienta pomocí parametru HostKeyAlgorithms=+ssh-dss :
1 2 |
[23:15:19]:radim@Radims-MacBook-Pro.local :~ $ ssh -o HostKeyAlgorithms=+ssh-dss radim@10.1.5.254 ssh_dispatch_run_fatal: Connection to 10.1.5.1 port 22: DH GEX group out of range |
V našem případě ale narážíme na další problém – DH GEX group out of range. Vynucený algoritmus DH podporuje pouze 1024. Což není ze strany klienta akceptováno. Důvodem je, že minimální velikost klíče pro DH byla změněna z 1024 1536. Musíme tedy opět na straně klienta vynutit, že se chceme připojit. V tomto případě je to na úkor bezpečnosti. Přidáme parametr KexAlgorithms (Key Exchange Alghoritmus). V našem případě – diffie-hellman-group14-sha1.
1 |
[23:17:31]:radim@Radims-MacBook-Pro.local :~ $ ssh -v -o HostKeyAlgorithms=ssh-dss -o KexAlgorithms=diffie-hellman-group14-sha1 radim@10.1.5.254 |
Přihlášení:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
OpenSSH_7.2p2, LibreSSL 2.4.1 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 20: Applying options for * debug1: Connecting to 10.1.5.254 [10.1.5.254] port 22. debug1: Connection established. debug1: identity file ./.ssh/id_ed25519-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.2 debug1: Remote protocol version 2.0, remote software version ROSSSH debug1: no match: ROSSSH debug1: Authenticating to 10.1.5.254:22 as 'radim' debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: diffie-hellman-group14-sha1 debug1: kex: host key algorithm: ssh-dss debug1: kex: server->client cipher: aes128-cbc MAC: hmac-sha1 compression: none debug1: kex: client->server cipher: aes128-cbc MAC: hmac-sha1 compression: none debug1: sending SSH2_MSG_KEXDH_INIT debug1: expecting SSH2_MSG_KEXDH_REPLY debug1: Server host key: ssh-dss SHA256:caaXV38uQ1qQTWC8A6PWCx/vs4x+RqRpuhPN9RWfEgE The authenticity of host '10.1.5.1 (10.1.5.1)' can't be established. key fingerprint is SHA256:caaXV38uQ1qQTWC8A6PWCx/vs4x+RqRpuhPN9RWfEgE. The authenticity of host '10.1.5.1 (10.1.5.1)' can't be established. key fingerprint is SHA256:caaXV38uQ1qQTWC8A6PWCx/vs4x+RqRpuhPN9RWfEgE. Are you sure you want to continue connecting (yes/no)? |
Přihlášení proběhlo! Ovšem je to na úkor bezpečnost. Určitě je lepší variantou zabezpečit systém tak, aby bylo možné se přihlašovat bezpečně.
Úprava .ssh/config
Seznam systémů, ke kterým se chceme přihlašovat za cenu nižšího zabezpečení je nutné specifikovat v konfiguračním hostu SSH klienta. Nebude tak nutné pro příští přihlášení zadávat konfigurační parametry SSH přímo do příkazové řádky.
Konfigurační soubor pro macOS se nachází v cestě ~/.ssh/config
1 2 3 |
1 Host 10.1.5.254, 192.168.23.*, bobek.mojservery.cz *.switche.net 2 HostKeyAlgorithms ssh-dss 3 KexAlgorithms diffie-hellman-group1-sha1 |