Stel een veilige wachtwoordloze login in op uw externe Ubuntu-server met behulp van SSH-sleutels
SSH is een beveiligd client-server-netwerkprotocol dat een clientcomputer helpt om verbinding te maken met en te communiceren met een externe server. SSH-verbinding zorgt ervoor dat de opdrachten die in de terminal worden ingetypt via een versleuteld kanaal naar de externe server worden gestuurd.
Er zijn twee soorten authenticatiemechanismen die worden gebruikt om verbinding te maken met de externe server, op wachtwoord gebaseerde authenticatie (gevoelig voor brute-force-aanvallen) en op SSH-sleutels gebaseerde authenticatie (wat erg veilig is).
Bij de op SSH-sleutel gebaseerde authenticatie wordt een sleutelpaar gegenereerd op de clientcomputer, de openbare sleutel en de privésleutel. Een kopie van deze openbare sleutel wordt beschikbaar gesteld op de externe server. Wanneer een client een verbindingsverzoek naar de server stuurt, genereert de server een willekeurige reeks en versleutelt deze met behulp van de openbare sleutel. Deze string kan alleen worden ontsleuteld met behulp van de persoonlijke sleutel die beschikbaar is op de clientcomputer. Deze methode zorgt ervoor dat de server alleen toegankelijk is voor clients die de persoonlijke sleutel bevatten.
In deze handleiding zullen we zien hoe u SSH-sleutels instelt op de Ubuntu 20.04 LTS-server.
Kijk of je een bestaande SSH-sleutel op je computer hebt
Om te controleren of er al een SSH Keypair op uw computer bestaat, typt u deze opdracht in uw terminal.
ls -l ~/.ssh/id_*.pub
Als het bovenstaande commando terugkeert Bestand of map bestaat niet
of geen overeenkomsten gevonden
, dan betekent dit dat het SSH-sleutelpaar niet bestaat.
Als je een bestaand SSH-sleutelpaar hebt, kun je hetzelfde sleutelpaar gebruiken om toegang te krijgen tot twee externe servers, of je kunt ook een ander sleutelpaar maken met een andere naam. Laten we verder gaan met de volgende stap en kijken hoe we SSH-sleutels voor beide gevallen kunnen genereren.
SSH-sleutels maken op een clientcomputer
Om een nieuw SSH-sleutelpaar op uw computer te genereren, typt u de onderstaande opdracht.
ssh-keygen
Standaard zijn de SSH-sleutels van 2048 bit. Voor een betere beveiliging, als u SSH-sleutels met hogere bits wilt genereren, gebruik dan de volgende opdracht.
ssh-keygen -b 4096
Als de opdracht met succes wordt uitgevoerd, wordt het volgende bericht op uw scherm weergegeven.
genereren van publiek/privé rsa-sleutelpaar. Voer het bestand in waarin u de sleutel wilt opslaan (/home/harshit/.ssh/id_rsa):
Als u nu geen bestaand SSH-sleutelpaar op uw computer heeft, drukt u gewoon op Binnenkomen
, maar als je een bestaande SSH-sleutel hebt, sla de sleutel dan op met een andere bestandsnaam zoals hieronder weergegeven.
Voer het bestand in waarin u de sleutel wilt opslaan (/home/uw_naam/.ssh/id_rsa): /home/uw_naam/.ssh/id_rsa_xxx
Vervang de xxx
aan het einde van de bestandsnaam met een toepasselijke naam, zoals hieronder weergegeven en druk op Binnenkomen
.
Voer het bestand in waarin u de sleutel wilt opslaan (/home/uw_naam/.ssh/id_rsa): /home/uw_naam/.ssh/id_rsa_client_1
De volgende prompt zal u vragen om een wachtwoordzin van een willekeurige lengte in te voeren, het zorgt voor beveiliging op twee niveaus op uw apparaat.
Voer wachtwoordzin in (leeg voor geen wachtwoordzin): Voer dezelfde wachtwoordzin opnieuw in:
Als u deze wachtwoordzin invoert, zorgt u ervoor dat, zelfs als een persoon toegang krijgt tot uw privésleutel, hij geen toegang heeft tot uw externe server zonder deze wachtwoordzin.
Zodra het hele proces is voltooid, verschijnt het volgende bericht op uw scherm.
De SSH-sleutels zijn op uw systeem gegenereerd. Nu is het tijd om de openbare sleutel op de externe server te kopiëren.
De openbare sleutel kopiëren naar de externe Ubuntu-server
De gemakkelijkste en snelste methode om de openbare sleutel naar de externe server te kopiëren, is door de ssh-kopie-id
nutsvoorziening. Maar als dit hulpprogramma om de een of andere reden niet beschikbaar is op uw computer, kunt u ook andere methoden gebruiken die in deze sectie worden beschreven.
Het hulpprogramma ssh-copy-id gebruiken
De ssh-kopie-id
hulpprogramma is standaard beschikbaar op uw Ubuntu-machine die de openbare sleutel van uw apparaat naar de juiste map van uw externe Ubuntu-machine kopieert.
Om de openbare ssh-sleutel te kopiëren, typt u eenvoudig de opdracht in uw terminal, zoals hieronder wordt weergegeven.
ssh-copy-id gebruikersnaam@hostnaam
Vervang de gebruikersnaam
en hostnaam
in de bovenstaande opdracht met de gebruikersnaam en hostnaam van uw server.
Het volgende bericht verschijnt op uw terminal als u voor de eerste keer verbinding maakt met uw host, typ Ja
en druk op Binnenkomen
.
De authenticiteit van gastheer '172.105.XX.XX (172.105.XX.XX)' kan niet worden vastgesteld. De vingerafdruk van de ECDSA-sleutel is xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx. Weet u zeker dat u door wilt gaan met verbinden (ja/nee)? Ja
Nu de ssh-kopie-id
hulpprogramma scant naar het bestand met de naam id_rsa.pub
die de openbare SSH-sleutel bevat. Zodra het scanproces is voltooid, wordt u gevraagd om het wachtwoord van uw externe server in te voeren, zoals hieronder weergegeven. Typ het wachtwoord en druk op Binnenkomen
.
/usr/bin/ssh-copy-id: INFO: probeert in te loggen met de nieuwe sleutel(s), om de reeds geïnstalleerde sleutel(s) eruit te filteren /usr/bin/ssh-copy-id: INFO: 1 sleutel(s) ) moeten nog worden geïnstalleerd -- als u nu wordt gevraagd, moet u de nieuwe sleutels [email protected]'s wachtwoord installeren:
Nadat de sleutel is toegevoegd, verschijnt het volgende bericht op uw terminal als uitvoer.
Aantal sleutel(s) toegevoegd: 1 Probeer nu in te loggen op de machine, met: "ssh '[email protected]'" en controleer of alleen de gewenste sleutel(s) zijn toegevoegd.
Als u meerdere SSH-sleutels op uw clientcomputer heeft, typt u de opdracht in het onderstaande patroon om de juiste openbare sleutel naar uw externe computer te kopiëren.
ssh-copy-id -i id_rsa_xxx.pub gebruikersnaam@host
Tip
Vergeet niet om .pub aan het einde van de bestandsnaam te plaatsen tijdens het typen in de terminal.
De openbare sleutel kopiëren via de piping-methode
Typ de volgende opdracht in de terminal als ssh-kopie-id
hulpprogramma is niet beschikbaar. Dit commando lijkt misschien wat langer, maar het werkt naar behoren.
kat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Vervangen remote_gebruikersnaam
en server IP adres
met uw gebruikersnaam en IP-adres.
Als je meerdere SSH-sleutels op je computer hebt, vervang dan de id_rsa.pub
met het openbare SSH-sleutelbestand van uw keuze. Bijvoorbeeld, id_rsa_client_1.pub
.
Typ het wachtwoord voor de externe gebruiker wanneer daarom wordt gevraagd en druk op Binnenkomen
.
[email protected]'s wachtwoord:
Nadat u het wachtwoord hebt getypt, wordt de id_rsa.pub
bestand wordt gekopieerd naar de geautoriseerde_sleutels
bestand van de externe server.
Handmatig de openbare sleutel kopiëren
Gebruik deze methode als u geen toegang hebt tot uw externe systeem via wachtwoordverificatie.
Open de id_rsa.pub
bestand met de kat
commando in de terminal. Je kunt het ook openen vanuit een teksteditor, het doel is alleen om de inhoud van het bestand te kopiëren.
kat ~/.ssh/id_rsa.pub
De inhoud van het bestand ziet er uit zoals hieronder weergegeven.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH your_name @ your_PC
Log nu in op uw externe server en plak de gekopieerde inhoud met behulp van de onderstaande opdracht. Vervang de boven_string
met de gekopieerde inhoud.
echo above_string >> ~/.ssh/authorized_keys
Meerdere SSH-sleutels configureren (optioneel)
Deze stap is bedoeld voor mensen die meerdere SSH-sleutels hebben ingesteld op hun clientcomputer. Sla deze sectie over als u slechts één SSH-sleutelconfiguratie heeft.
Om meerdere SSH-sleutels te beheren, maken we nu een configuratie
bestand in de .ssh
directory met behulp van de onderstaande opdracht.
cd ~/.ssh vim-configuratie
Type I
om naar de opdrachtmodus te gaan en de details van meerdere hosts in te voeren, zoals in het volgende voorbeeld:
Host remote-ubuntu-server HostName 172.105.XX.XX Root gebruiker identiteitsbestand ~/.ssh/id_rsa_client_1 Host remote-ubuntu-server HostName 172.106.XX.XX Root gebruiker IdentityFile ~/.ssh/id_rsa_client_2
Typ op dezelfde manier de details van andere externe servers en hun sleutels. Zodra het proces is voltooid, drukt u op Esc
en :wq
om op te slaan en af te sluiten.
Nu zijn de volgende processen hetzelfde voor zowel enkele als meerdere SSH-sleutels op de clientcomputer.
Log in op uw externe server met SSH-sleutels
Zodra het kopiëren van uw openbare sleutel is voltooid, logt u in op uw externe server door de onderstaande opdracht te typen.
ssh remote_gebruikersnaam@server_ip_address
Als u de wachtwoordzin hebt opgegeven tijdens het genereren van het sleutelpaar, wordt u gevraagd deze in te voeren. Er wordt een nieuwe sessie geopend nadat het authenticatieproces is voltooid.
U hebt nu met succes de op SSH-sleutels gebaseerde authenticatie geconfigureerd op uw externe server. Maar de op wachtwoord gebaseerde authenticatie is nog steeds actief op uw server, dit betekent dat uw externe server nog steeds vatbaar is voor brute-force-aanvallen.
Dus nu zullen we het op wachtwoord gebaseerde inlogmechanisme volledig uitschakelen vanaf onze externe server.
Op wachtwoord gebaseerd aanmeldingsmechanisme uitschakelen
Voordat u wijzigingen aanbrengt, moet u ervoor zorgen dat de rootgebruiker of een willekeurige sudo-gebruiker voor uw externe account toegang heeft tot uw server met behulp van het op SSH-sleutel gebaseerde authenticatiesysteem. Met deze stap wordt de op wachtwoord gebaseerde login volledig vergrendeld of uitgeschakeld, dus het is van cruciaal belang dat ten minste één gebruiker root-rechten toegang hebben tot de server via de SSH-sleutel.
Log in op uw externe Ubuntu-server en typ de onderstaande opdracht.
sudo vim /etc/ssh/sshd_config
- druk op
Esc
,/
en typ 'PasswordAuthentication' en druk opbinnenkomen
. - Druk nu op
I
en verander de waarde van ‘PasswordAuthentication yes’ in ‘PasswordAuthentication no’. - druk op
Esc
en herhaal het bovenstaande proces om 'ChallengeResponseAuthentication', 'UsePAM' te vinden en hun waarden te wijzigen inNee
ook.
WachtwoordAuthenticatie geen uitdagingResponseAuthenticatie geen gebruikPAM nee
Zodra alle waarden zijn ingesteld op Nee
, druk op Esc
, typ :wq
en raak binnenkomen
.
Om alle wijzigingen te activeren, herstart de ssh
service met behulp van de onderstaande opdracht.
sudo systemctl herstart ssh
Open nu een nieuw terminalvenster op uw computer en controleer of uw SSH-sleutelverificatie correct werkt voordat u de huidige sessie sluit.
Zodra het verificatieproces is voltooid, sluit u alle actieve sessies.
We hebben nu met succes de op SSH-sleutel gebaseerde authenticatie geconfigureerd op onze Ubuntu 20.04-server. Nu kan niemand inloggen op uw server met behulp van een op wachtwoorden gebaseerd inlogmechanisme.