Skip to main content

Alles over het Linux / Unix-commando: sshd

SSH, FTP, Ping, Telnet: Linux Networking Commands Tutorial 12 (Juni- 2026)

SSH, FTP, Ping, Telnet: Linux Networking Commands Tutorial 12 (Juni- 2026)
Anonim

Naam

sshd - OpenSSH SSH-daemon

Korte inhoud

sshd -deiqtD46 -b stukjes -f config_file -g login_grace_time -h host_key_file -k key_gen_time -O keuze -p haven -u len

Omschrijving

sshd (SSH Daemon) is het daemon-programma voor ssh (1). Samen vervangen deze programma's rlogin en rshen bieden beveiligde gecodeerde communicatie tussen twee niet-vertrouwde hosts via een onveilig netwerk. De programma's zijn bedoeld om zo eenvoudig te installeren en te gebruiken mogelijk te maken.

sshd is de daemon die luistert naar verbindingen van clients. Het wordt normaal gesproken gestart bij het opstarten vanaf / etc / rc. Het zoekt een nieuwe daemon voor elke inkomende verbinding. De gevorkte daemons verwerken sleuteluitwisseling, codering, authenticatie, uitvoering van opdrachten en gegevensuitwisseling. Deze implementatie vansshd ondersteunt zowel SSH-protocol versie 1 en 2 tegelijkertijd.

SSH-protocol versie 1

Elke host heeft een hostspecifieke RSA-sleutel (normaal 1024 bits) die wordt gebruikt om de host te identificeren. Bovendien, wanneer de daemon start, genereert het een server RSA-sleutel (normaal 768 bits). Deze sleutel wordt normaal elk uur geregenereerd als deze is gebruikt en wordt nooit op een schijf opgeslagen.

Telkens wanneer een client verbinding maakt, antwoordt de daemon met de openbare host- en serversleutels. De client vergelijkt de RSA-hostsleutel met zijn eigen database om te controleren of deze nog niet is gewijzigd. De client genereert vervolgens een 256-bits willekeurig nummer. Het codeert dit willekeurige nummer met behulp van zowel de host-sleutel als de server-key en stuurt het gecodeerde nummer naar de server. Beide partijen gebruiken dit willekeurige nummer vervolgens als sessiesleutel die wordt gebruikt om alle verdere communicatie in de sessie te coderen. De rest van de sessie wordt versleuteld met een conventioneel cijfer, momenteel Blowfish of 3DES, waarbij 3DES standaard wordt gebruikt. De client selecteert het coderingsalgoritme dat wordt gebruikt van de coderingsalgoritmen die door de server worden aangeboden.

Vervolgens voeren de server en de client een verificatiedialoog in. De client probeert zichzelf te verifiëren met behulp van .rhosts-verificatie, .rhosts-verificatie gecombineerd met RSA-hostverificatie, RSA-challenge-responsverificatie of wachtwoordgebaseerde verificatie.

Rhosts-authenticatie is normaal gesproken uitgeschakeld omdat het fundamenteel onveilig is, maar desgewenst kan worden ingeschakeld in het serverconfiguratiebestand. De systeembeveiliging is niet verbeterd, tenzijrshdrlogind en rexecd zijn uitgeschakeld (dus volledig uitschakelen rlogin en rsh in de machine).

SSH-protocol versie 2

Versie 2 werkt op dezelfde manier: elke host heeft een hostspecifieke sleutel (RSA of DSA) die wordt gebruikt om de host te identificeren. Wanneer de daemon start, genereert deze echter geen servercode. Voorwaartse beveiliging wordt geboden via een Diffie-Hellman sleutelovereenkomst. Deze sleutelovereenkomst resulteert in een gedeelde sessiesleutel.

De rest van de sessie is gecodeerd met een symmetrisch cijfer, momenteel 128 bit AES, Blowfish, 3DES, CAST128, Arcfour, 192 bit AES of 256 bit AES. De client selecteert het coderingsalgoritme dat wordt gebruikt van de coderingsalgoritmen die door de server worden aangeboden. Bovendien wordt de integriteit van de sessie geleverd door middel van een verificatiecode van een cryptografisch bericht (hmac-sha1 of hmac-md5).

Protocolversie 2 biedt een op public key gebaseerde gebruiker (PubkeyAuthentication) of clienthost (HostbasedAuthentication) authenticatiemethode, conventionele wachtwoordauthenticatie en op challenge-response gebaseerde methoden.

Opdrachtuitvoering en doorsturen van gegevens

Als de client zichzelf met succes authenticeert, wordt een dialoogvenster voor het voorbereiden van de sessie ingevoerd. Op dit moment kan de client dingen vragen zoals het toewijzen van een pseudo-tty, het doorsturen van X11-verbindingen, het doorsturen van TCP / IP-verbindingen of het doorsturen van de authenticatie-agentverbinding over het beveiligde kanaal.

Ten slotte vraagt ​​de client ofwel een shell of uitvoering van een commando. De zijkanten gaan dan naar de sessiemodus. In deze modus kan elke kant op elk moment gegevens verzenden en dergelijke gegevens worden doorgestuurd naar / van de shell of opdracht aan de serverzijde en de gebruikersterminal aan de clientzijde.

Wanneer het gebruikersprogramma wordt beëindigd en alle doorgestuurde X11 en andere verbindingen zijn gesloten, verzendt de server de opdrachtuitgangstatus naar de client en worden beide partijen afgesloten.

sshd kan worden geconfigureerd met behulp van opdrachtregelopties of een configuratiebestand. Opdrachtregelopties overschrijven waarden die zijn opgegeven in het configuratiebestand.

sshd herleest het configuratiebestand wanneer het een ophangsignaal ontvangt,SIGHUP door zichzelf uit te voeren met de naam waarmee het werd gestart, d.w.z. / usr / sbin / sshd

De opties zijn als volgt:

-b stukjes

Specificeert het aantal bits in de server-sleutel van het tijdelijke protocol versie 1 (standaard 768).

-d

Foutopsporingsmodus. De server verzendt uitgebreide foutopsporingsuitvoer naar het systeemlogboek en plaatst zichzelf niet op de achtergrond. De server zal ook niet werken en zal slechts één verbinding verwerken. Deze optie is alleen bedoeld voor foutopsporing voor de server. Meerdere d-opties verhogen het foutopsporingsniveau. Maximum is 3.

-e

Wanneer deze optie is opgegeven,sshd stuurt de uitvoer naar de standaardfout in plaats van het systeemlogboek.

-f configuratiebestand

Specificeert de naam van het configuratiebestand. De standaardinstelling is / etc / ssh / sshd_configsshdweigert te starten als er geen configuratiebestand is.

-g login_grace_time

Geeft de gratie tijd voor clients om zichzelf te authenticeren (standaard 120 seconden). Als de client niet binnen deze vele seconden de gebruiker kan verifiëren, wordt de verbinding met de server verbroken en wordt de server afgesloten.Een waarde van nul geeft geen limiet aan.

-h host_key_file

Geeft een bestand aan waarvan een hostsleutel wordt gelezen. Deze optie moet worden gegeven alssshd wordt niet als root uitgevoerd (zoals de normale host-sleutelbestanden normaal gesproken niet leesbaar zijn voor iemand anders dan root). De standaardinstelling is / etc / ssh / ssh_host_key voor protocolversie 1, en / etc / ssh / ssh_host_rsa_key en / etc / ssh / ssh_host_dsa_key voor protocolversie 2. Het is mogelijk om meerdere hostsleutelbestanden te hebben voor de verschillende protocolversies en hostsleutel algoritmen.

-ik

Specificeert datsshd wordt vanuit inetd uitgevoerd.sshd wordt normaal gesproken niet uitgevoerd vanuit inetd omdat het de server sleutel moet genereren voordat het op de client kan reageren, en dit kan tientallen seconden duren. Cliënten zouden te lang moeten wachten als de sleutel elke keer opnieuw wordt gegenereerd. Met kleine sleutellengtes (bijvoorbeeld 512) metsshd van inetd mogelijk haalbaar.

-k key_gen_time

Geeft aan hoe vaak de kortstondige protocolversie 1-serversleutel wordt geregenereerd (standaard 3600 seconden of één uur). De motivatie voor het vrij vaak regenereren van de sleutel is dat de sleutel nergens wordt opgeslagen en na ongeveer een uur wordt het onmogelijk om de sleutel te herstellen voor het decoderen van onderschepte communicatie, zelfs als de machine is ingeklemd of fysiek is vastgegrepen. Een waarde van nul geeft aan dat de sleutel nooit zal worden geregenereerd.

-O keuze

Kan worden gebruikt om opties te geven in het formaat dat wordt gebruikt in het configuratiebestand. Dit is handig voor het opgeven van opties waarvoor geen aparte opdrachtregelvlag bestaat.

-p haven

Geeft de poort op waarop de server naar verbindingen luistert (standaard 22). Meerdere poortopties zijn toegestaan. Poorten die zijn opgegeven in het configuratiebestand worden genegeerd wanneer een opdrachtregelpoort is opgegeven.

-q

Stille modus. Er wordt niets verzonden naar het systeemlogboek. Normaal gesproken worden het begin, de authenticatie en de beëindiging van elke verbinding vastgelegd.

-t

Testmodus. Controleer alleen de geldigheid van het configuratiebestand en de gezondheid van de sleutels. Dit is handig voor het updatensshd betrouwbaar als configuratie-opties kunnen veranderen.

-u len

Deze optie wordt gebruikt om de grootte van het veld in deutmp structuur die de externe hostnaam bevat. Als de geresolveerde hostnaam langer is dan len de gestippelde decimale waarde wordt in plaats daarvan gebruikt. Hierdoor kunnen hosts met zeer lange hostnamen dit veld overlopen om nog steeds uniek te worden geïdentificeerd. Specificeren -u0 geeft aan dat alleen gestippelde decimale adressen in het utmp-bestand moeten worden geplaatst. -u0 wordt ook gebruikt om te voorkomensshd van het maken van DNS-verzoeken, tenzij het authenticatiemechanisme of de configuratie dit vereist. Verificatiemechanismen waarvoor mogelijk DNS vereist isRhostsAuthenticationRhostsRSAAuthentication HostbasedAuthentication en met behulp van eenfrom = pattern-overzichtoptie in een sleutelbestand. Configuratie-opties waarvoor DNS is vereist, gebruiken een USER @ HOST-patroon inAllowUsers ofDenyUsers

-D

Wanneer deze optie is opgegevensshd zal niet loslaten en wordt geen daemon. Dit maakt eenvoudige bewaking vansshd

-4

krachtensshd om alleen IPv4-adressen te gebruiken.

-6

krachtensshd om alleen IPv6-adressen te gebruiken.

Configuratiebestand

sshd leest configuratiegegevens van / etc / ssh / sshd_config (of het bestand gespecificeerd met -f op de opdrachtregel). Het bestandsformaat en configuratie-opties worden beschreven in sshd_config5.

Aanmeldingsproces

Wanneer een gebruiker zich met succes aanmeldt,sshd doet het volgende:

  1. Als de login zich op een tty bevindt en er geen opdracht is opgegeven, worden de laatste aanmeldtijd en / etc / motd afgedrukt (tenzij dit in het configuratiebestand is voorkomen of door $ HOME / .hushlogin in de sectie Sx FILES te zien).
  2. Als de aanmelding op een tty staat, wordt de aanmeldtijd geregistreerd.
  3. Controleert / etc / nologin als deze bestaat, drukt de inhoud af en stopt (tenzij root).
  4. Wijzigingen worden uitgevoerd met normale gebruikersrechten.
  5. Stelt de basisomgeving in.
  6. Leest $ HOME / .ssh / environment als deze bestaat en gebruikers hun omgeving mogen wijzigen. Zie dePermitUserEnvironment optie in sshd_config5.
  7. Wijzigingen in de basismap van de gebruiker.
  8. Als $ HOME / .ssh / rc bestaat, wordt het uitgevoerd; anders als / etc / ssh / sshrc bestaat, wordt het uitgevoerd; anders wordt xauth uitgevoerd. De `` rc '' bestanden krijgen het X11 authenticatie protocol en cookie in standaard invoer.
  9. Voert shell of opdracht van gebruiker uit.

Authorized_Keys Bestandsformaat

$ HOME / .ssh / authorized_keys is het standaardbestand met de openbare sleutels die zijn toegestaan ​​voor RSA-verificatie in protocolversie 1 en voor openbare-sleutelauthenticatie (PubkeyAuthentication) in protocolversie 2.AuthorizedKeysFile kan worden gebruikt om een ​​alternatief bestand op te geven.

Elke regel van het bestand bevat één sleutel (lege regels en regels die beginnen met een `# 'worden genegeerd als commentaar). Elke openbare RSA-sleutel bestaat uit de volgende velden, gescheiden door spaties: opties, bits, exponent, modulus, opmerking. Elke publieke versie van protocol versie 2 bestaat uit: opties, keytype, key64 gecodeerde sleutel, opmerking. Het optieveld is optioneel; de aanwezigheid wordt bepaald door de vraag of de regel begint met een cijfer of niet (het optieveld begint nooit met een cijfer). De bits, exponent, modulus en commentaarvelden geven de RSA-sleutel voor protocolversie 1; het commentaarveld wordt voor niets gebruikt (maar kan handig zijn voor de gebruiker om de sleutel te identificeren). Voor protocolversie 2 is het sleuteltype `` ssh-dss '' of `` ssh-rsa ''

Merk op dat regels in dit bestand meestal enkele honderden bytes lang zijn (vanwege de grootte van de publieke sleutelcodering). Je wilt ze niet intypen; kopieer in plaats daarvan het bestand identity.pub id_dsa.pub of id_rsa.pub en bewerk het.

sshd dwingt een minimale RSA-sleutelmodulus af voor protocol 1 en protocol 2-sleutels van 768 bits.

De opties (indien aanwezig) bestaan ​​uit door komma's gescheiden optiespecificaties. Spaties zijn niet toegestaan, behalve binnen dubbele aanhalingstekens. De volgende specificaties van opties worden ondersteund (merk op dat de optiezoekwoorden hoofdlettergevoelig zijn):

from = pattern-overzicht

Geeft aan dat naast de verificatie met openbare sleutels de canonieke naam van de externe host aanwezig moet zijn in de door komma's gescheiden lijst met patronen (`* 'en`?' Dienen als jokertekens). De lijst kan ook patronen bevatten die worden genegeerd door ze te prefixen met `! ' ; als de canonieke hostnaam overeenkomt met een genegeerd patroon, wordt de sleutel niet geaccepteerd. Het doel van deze optie is om optioneel de beveiliging te verhogen: openbare-sleutelverificatie op zich vertrouwt het netwerk- of naamservers of iets (maar de sleutel) niet; Als iemand echter op de een of andere manier de sleutel steelt, staat de sleutel een indringer toe om zich overal ter wereld aan te melden. Deze extra optie maakt het gebruik van een gestolen sleutel moeilijker (naamservers en / of routers moeten worden gecompromitteerd naast alleen de sleutel).

command = command

Geeft aan dat de opdracht wordt uitgevoerd wanneer deze sleutel wordt gebruikt voor verificatie. De door de gebruiker geleverde opdracht (indien aanwezig) wordt genegeerd. De opdracht wordt uitgevoerd op een pty als de client een pty aanvraagt; anders wordt het uitgevoerd zonder een tty. Als een 8-bits clean-kanaal vereist is, moet u geen pty aanvragen of opgevenno-pty Een citaat kan in het commando worden opgenomen door het te citeren met een backslash. Deze optie kan handig zijn om bepaalde openbare sleutels te beperken om alleen een specifieke bewerking uit te voeren. Een voorbeeld kan een sleutel zijn die externe back-ups toestaat, maar niets anders. Merk op dat de client TCP / IP en / of X11-forwarding kan specificeren, tenzij deze expliciet verboden zijn. Merk op dat deze optie van toepassing is op shell-, commando- of subsysteemuitvoering.

milieu = NAME = value

Geeft aan dat de tekenreeks moet worden toegevoegd aan de omgeving wanneer wordt ingelogd met behulp van deze sleutel. Omgevingsvariabelen die op deze manier zijn ingesteld, vervangen andere standaard omgevingswaarden. Meerdere opties van dit type zijn toegestaan. Omgevingverwerking is standaard uitgeschakeld en wordt bestuurd via dePermitUserEnvironment keuze. Deze optie wordt automatisch uitgeschakeld alsUseLogin is ingeschakeld.

no-port-forwarding

Verbiedt TCP / IP-forwarding wanneer deze sleutel wordt gebruikt voor authenticatie. Eventuele poortdoorstuurverzoeken van de client retourneren een fout. Dit kan bijvoorbeeld worden gebruikt in verband met decommando keuze.

no-X11-forwarding

Verbiedt het doorsturen van X11 wanneer deze sleutel wordt gebruikt voor authenticatie. Eventuele X11-forward-verzoeken van de client retourneren een fout.

no-agent forwarding

Verbiedt het doorsturen van authenticatiemiddelen wanneer deze sleutel wordt gebruikt voor authenticatie.

no-pty

Voorkomt tty-toewijzing (een verzoek om toewijzing van een pty mislukt).

permitopen = host: port

Beperk lokaal`` ssh -L '' port forwarding zodanig dat deze alleen verbinding kan maken met de opgegeven host en poort. IPv6-adressen kunnen worden gespecificeerd met een alternatieve syntaxis: host / poort Meerdere permitopen opties kunnen worden toegepast, gescheiden door komma's. Er wordt geen patroonafstemming uitgevoerd op de opgegeven hostnamen, dit moeten letterlijke domeinen of adressen zijn.

Voorbeelden

1024 33 12121 … 312314325 [email protected]

from = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 … 2334 ylo @ niksula

command = "dump / home", no-pty, no-port-forwarding 1024 33 23 … 2323 backup.hut.fi

permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25" 1024 33 23 … 2323

Ssh_Known_Hosts Bestandsformaat

De bestanden / etc / ssh / ssh_known_hosts en $ HOME / .ssh / known_hosts bevatten openbare hostsleutels voor alle bekende hosts. Het globale bestand moet worden voorbereid door de beheerder (optioneel) en het bestand per gebruiker wordt automatisch bijgehouden: telkens wanneer de gebruiker verbinding maakt met een onbekende host, wordt de sleutel toegevoegd aan het bestand per gebruiker.

Elke regel in deze bestanden bevat de volgende velden: hostnamen, bits, exponent, modulus, opmerking. De velden zijn gescheiden door spaties.

Hostnamen zijn een door komma's gescheiden lijst met patronen ('*' en '?' Fungeren als jokertekens); elk patroon wordt op zijn beurt vergeleken met de canonieke hostnaam (bij authenticatie van een client) of met de door de gebruiker opgegeven naam (bij authenticatie van een server). Een patroon kan ook worden voorafgegaan door `! ' om negatie aan te geven: als de hostnaam overeenkomt met een ontkennend patroon, wordt deze niet geaccepteerd (op die regel), zelfs als deze overeenkomt met een ander patroon op de regel.

Bits, exponent en modulus worden rechtstreeks van de RSA-hostsleutel genomen; ze kunnen bijvoorbeeld worden verkregen uit /etc/ssh/ssh_host_key.pub Het optionele commentaarveld gaat verder tot het einde van de regel en wordt niet gebruikt.

Regels die beginnen met `# 'en lege regels worden genegeerd als opmerkingen.

Bij het uitvoeren van hostauthenticatie wordt verificatie geaccepteerd als een overeenkomende regel de juiste sleutel heeft. Het is dus toegestaan ​​(maar niet aanbevolen) om meerdere regels of verschillende host-sleutels voor dezelfde naam te hebben. Dit zal onvermijdelijk gebeuren wanneer korte vormen van hostnamen uit verschillende domeinen in het bestand worden geplaatst. Het is mogelijk dat de bestanden conflicterende informatie bevatten; verificatie wordt geaccepteerd als geldige informatie uit beide bestanden kan worden gevonden.

Merk op dat de regels in deze bestanden meestal honderden tekens lang zijn en dat je absoluut niet met de hand in de host-sleutels wilt typen. Genereer ze liever met een script of door /etc/ssh/ssh_host_key.pub te gebruiken en de hostnamen aan de voorkant toe te voegen.

Voorbeelden

closenet, …, 130.233.208.41 1024 37 159 … 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ….. =

Zie ook

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "SSH-protocolarchitectuur" draft-ietf-secsh-architecture-12.txt Januari 2002 work-in-progress materiaal

M. Friedl N. Provos W.A. Simpson "Diffie-Hellman Group Exchange voor het SSH Transport Layer Protocol" draft-ietf-secsh-dh-group-exchange-02.txt januari 2002 materiaal in bewerking

Belangrijk: Gebruik de man commando ( % man ) om te zien hoe een opdracht wordt gebruikt op uw specifieke computer.