Introductie
Een essentieel instrument om te beheersen als systeembeheerder is SSH.
SSH, ofwel Secure Shell, is een protocol dat wordt gebruikt om veilig in te loggen op externe systemen. Het is de meest voorkomende manier om toegang te krijgen tot externe Linux-servers.
In deze handleiding zullen we bespreken hoe SSH te gebruiken om verbinding te maken met een extern systeem.
Implementeer uw frontend-applicaties vanuit GitHub met behulp van DigitalOcean App Platform. Laat DigitalOcean zich richten op het schalen van uw app.
Kernsyntax
Om verbinding te maken met een extern systeem via SSH, zullen we het ssh
-commando gebruiken.
Als je Windows gebruikt, moet je een versie van OpenSSH installeren om vanuit een terminal te kunnen ssh
en. Als je liever in PowerShell werkt, kun je de documentatie van Microsoft volgen om OpenSSH aan PowerShell toe te voegen. Als je liever een volledige Linux-omgeving beschikbaar hebt, kun je WSL instellen, de Windows Subsystem voor Linux, die standaard ssh
zal bevatten. Tenslotte, als een lichtgewicht derde optie, kun je Git voor Windows installeren, dat een native Windows bash-terminalomgeving biedt die het ssh
-commando bevat. Elk van deze opties wordt goed ondersteund en de keuze zal afhangen van je voorkeur.
Als je een Mac of Linux gebruikt, heb je al het ssh
-commando beschikbaar in je terminal.
De meest directe vorm van het commando is:
Het remote_host
in dit voorbeeld is het IP-adres of domeinnaam waarmee je probeert verbinding te maken.
Dit commando gaat ervan uit dat je gebruikersnaam op het externe systeem hetzelfde is als je gebruikersnaam op je lokale systeem.
Als je gebruikersnaam op het externe systeem anders is, kun je deze specificeren met behulp van deze syntaxis:
Zodra je verbonden bent met de server, kan je worden gevraagd om je identiteit te verifiëren door een wachtwoord op te geven. Later zullen we behandelen hoe je sleutels kunt genereren om in plaats van wachtwoorden te gebruiken.
Om de SSH-sessie te verlaten en terug te keren naar je lokale shell-sessie, typ:
Hoe werkt SSH?
SSH werkt door een clientprogramma te verbinden met een SSH-server, genaamd sshd
.
In de vorige sectie was ssh
het clientprogramma. De SSH-server was al actief op de remote_host
die we hebben gespecificeerd.
Op bijna alle Linux-omgevingen zou de sshd
-server automatisch moeten starten. Als deze om welke reden dan ook niet actief is, moet je mogelijk tijdelijk toegang krijgen tot je server via een op web gebaseerde console of lokale seriële console.
Het proces om een SSH-server te starten, is afhankelijk van de distributie van Linux die je gebruikt.
Op Ubuntu kun je de SSH-server starten door het volgende te typen:
Dat zou de sshd-server moeten starten en je kunt dan op afstand inloggen.
Hoe SSH configureren
Wanneer je de configuratie van SSH wijzigt, wijzig je de instellingen van de sshd-server.
In Ubuntu bevindt het hoofdconfiguratiebestand van sshd zich op /etc/ssh/sshd_config
.
Maak een back-up van de huidige versie van dit bestand voordat je wijzigingen aanbrengt:
Open het met nano
of je favoriete teksteditor:
Je wilt de meeste opties in dit bestand met rust laten. Er zijn echter een paar waar je misschien naar wilt kijken:
Port 22
De poortverklaring geeft aan op welke poort de sshd-server zal luisteren voor verbindingen. Standaard is dit 22
. Je moet deze instelling waarschijnlijk met rust laten, tenzij je specifieke redenen hebt om dit te veranderen. Als je toch je poort wijzigt, laten we je later zien hoe je verbinding kunt maken met de nieuwe poort.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
De verklaringen van de hostsleutels geven aan waar naar globale hostsleutels moet worden gezocht. We zullen later bespreken wat een hostsleutel is.
SyslogFacility AUTH
LogLevel INFO
Deze twee items geven het niveau van logging aan dat moet plaatsvinden.
Als je problemen hebt met SSH, kan het verhogen van de hoeveelheid logging een goede manier zijn om te ontdekken wat het probleem is.
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
Deze parameters specificeren een deel van de aanmeldingsgegevens.
LoginGraceTime
geeft aan hoeveel seconden de verbinding in leven moet worden gehouden zonder succesvol in te loggen.
Het is misschien een goed idee om deze tijd net iets langer in te stellen dan de tijd die nodig is om normaal in te loggen.
PermitRootLogin
selecteert of de root gebruiker mag inloggen.
In de meeste gevallen moet dit worden gewijzigd in no
wanneer je een gebruikersaccount hebt aangemaakt dat toegang heeft tot verhoogde privileges (via su
of sudo
) en kan inloggen via ssh, om het risico te minimaliseren dat iemand roottoegang tot je server krijgt.
strictModes
is een veiligheidsmaatregel die een aanmeldingspoging zal weigeren als de verificatiebestanden leesbaar zijn voor iedereen.
Dit voorkomt aanmeldingspogingen wanneer de configuratiebestanden niet veilig zijn.
X11Forwarding yes
X11DisplayOffset 10
Deze parameters configureren een functionaliteit genaamd X11 Forwarding. Hiermee kunt u de grafische gebruikersinterface (GUI) van een extern systeem bekijken op het lokale systeem.
Deze optie moet ingeschakeld zijn op de server en meegegeven worden met de SSH-client tijdens de verbinding met de -X
-optie.
Na het maken van uw wijzigingen, slaat u het bestand op en sluit u het. Als u nano
gebruikt, drukt u op Ctrl+X
, vervolgens wanneer daarom wordt gevraagd, Y
en dan Enter.
Als u instellingen heeft gewijzigd in /etc/ssh/sshd_config
, zorg er dan voor dat u uw sshd-server opnieuw laadt om uw wijzigingen door te voeren:
U moet uw wijzigingen grondig testen om ervoor te zorgen dat ze werken zoals u verwacht.
Het kan een goed idee zijn om een paar terminalsessies open te hebben terwijl u wijzigingen aanbrengt. Dit stelt u in staat om de configuratie indien nodig ongedaan te maken zonder uzelf buiten te sluiten.
Hoe in te loggen op SSH met sleutels
Hoewel het handig is om te kunnen inloggen op een extern systeem met wachtwoorden, is het sneller en veiliger om sleutelgebaseerde verificatie in te stellen.
Hoe werkt key-based authenticatie?
Key-based authenticatie werkt door het creëren van een paar sleutels: een privésleutel en een openbare sleutel.
De privésleutel bevindt zich op de clientmachine en wordt beveiligd en geheim gehouden.
De openbare sleutel kan aan iedereen worden gegeven of worden geplaatst op elke server die u wilt benaderen.
Wanneer u probeert verbinding te maken met behulp van een sleutelpaar, zal de server de openbare sleutel gebruiken om een bericht te maken voor de clientcomputer dat alleen kan worden gelezen met de privésleutel.
De clientcomputer stuurt vervolgens het juiste antwoord terug naar de server en de server zal weten dat de client legitiem is.
Dit proces wordt automatisch uitgevoerd nadat u uw sleutels hebt geconfigureerd.
Hoe SSH-sleutels te maken
SSH-sleutels moeten worden gegenereerd op de computer waarvan u wilt inloggen vanaf. Dit is meestal uw lokale machine.
Voer het volgende in op de commandoregel:
U wordt mogelijk gevraagd om een wachtwoord in te stellen op de sleutelbestanden zelf, maar dit is een vrij ongebruikelijke praktijk, en u zou op enter moeten drukken door de prompts om de standaardopties te accepteren. Uw sleutels worden aangemaakt op ~/.ssh/id_rsa.pub en ~/.ssh/id_rsa.
Verander naar de .ssh
-map door het volgende in te typen:
Bekijk de machtigingen van de bestanden:
Output-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
Zoals u kunt zien, is het bestand id_rsa
alleen leesbaar en schrijfbaar voor de eigenaar. Dit helpt om het geheim te houden.
Het bestand id_rsa.pub
daarentegen kan worden gedeeld en heeft de juiste machtigingen voor deze activiteit.
Hoe u uw openbare sleutel naar de server kunt overdragen
Als u momenteel toegang hebt tot een server op basis van wachtwoord, kunt u uw openbare sleutel daarnaar kopiëren door dit commando uit te voeren:
Dit zal een SSH-sessie starten. Nadat u uw wachtwoord hebt ingevoerd, zal het uw openbare sleutel naar het geautoriseerde sleutelbestand van de server kopiëren, waardoor u de volgende keer kunt inloggen zonder wachtwoord.
Opties aan de clientzijde
Er zijn een aantal optionele vlaggen die u kunt opgeven bij het verbinden via SSH.
Sommige van deze kunnen nodig zijn om overeen te komen met de instellingen in de sshd
-configuratie van de externe host.
Bijvoorbeeld, als je het poortnummer in je sshd
-configuratie hebt gewijzigd, moet je die poort aan de clientzijde overeen laten komen door het volgende te typen:
Let op: Het wijzigen van je ssh-poort is een redelijke manier om beveiliging door obscuriteit te bieden. Als je ssh-verbindingen toestaat naar een algemeen bekende server-implementatie op poort 22 zoals normaal, en je hebt wachtwoordauthenticatie ingeschakeld, zul je waarschijnlijk worden aangevallen door vele geautomatiseerde inlogpogingen. Exclusief het gebruik van op sleutel gebaseerde authenticatie en het uitvoeren van ssh op een niet-standaard poort is niet de meest complexe beveiligingsoplossing die je kunt toepassen, maar zou deze tot een minimum moeten beperken.
Als je slechts één opdracht op een extern systeem wilt uitvoeren, kun je deze specificeren na de host zoals hier:
Je zult verbinding maken met de externe machine, authenticeren en de opdracht zal worden uitgevoerd.
Zoals we eerder hebben gezegd, als X11-forwarding is ingeschakeld op beide computers, kun je die functionaliteit benaderen door het volgende te typen:
Als je de juiste tools op je computer hebt, zullen GUI-programma’s die je op het externe systeem gebruikt, nu hun venster openen op je lokale systeem.
Wachtwoordauthenticatie uitschakelen
Als u SSH-sleutels heeft aangemaakt, kunt u de beveiliging van uw server verbeteren door authenticatie alleen met wachtwoorden uit te schakelen. Afgezien van de console, is de enige manier om in te loggen op uw server via de privésleutel die overeenkomt met de openbare sleutel die u op de server heeft geïnstalleerd.
Waarschuwing: Voordat u met deze stap doorgaat, zorg ervoor dat u een openbare sleutel op uw server heeft geïnstalleerd. Anders wordt u buitengesloten!
Als root of gebruiker met sudo-rechten, opent u het configuratiebestand sshd
:
Zoek de regel die Password Authentication
leest en verwijder het toonaangevende #
om het te ontkoppelen. U kunt vervolgens de waarde wijzigen naar no
:
PasswordAuthentication no
Nog twee instellingen die niet hoeven te worden gewijzigd (tenzij u dit bestand eerder hebt gewijzigd), zijn PubkeyAuthentication
en ChallengeResponseAuthentication
. Ze zijn standaard ingesteld en moeten als volgt worden gelezen:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Nadat u uw wijzigingen heeft aangebracht, slaat u het bestand op en sluit u het.
U kunt nu de SSH-daemon herladen:
Wachtwoordauthenticatie moet nu zijn uitgeschakeld en uw server moet alleen toegankelijk zijn via SSH-sleutelauthenticatie.
Conclusie
Het leren navigeren binnen SSH zal je ten zeerste van pas komen bij al je toekomstige cloud computing inspanningen. Naarmate je de verschillende opties gebruikt, zul je meer geavanceerde functionaliteiten ontdekken die je leven gemakkelijker kunnen maken. SSH is populair gebleven omdat het veilig, lichtgewicht en bruikbaar is in diverse situaties.
Vervolgens wil je misschien meer leren over het werken met SFTP om commandoregelbestandsoverdrachten uit te voeren.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server