Како да конфигурирате автентикација базирана на клучеви SSH на сервер Линукс


Вовед

SSH, или безбедна школка, е шифриран протокол што се користи за администрирање и комуникација со серверите. Кога работите со сервер Линукс, често може да поминувате голем дел од вашето време во терминална сесија поврзана со вашиот сервер преку SSH.

Иако постојат неколку различни начини за најавување на SSH сервер, во ова упатство, ќе се фокусираме на поставувањето SSH клучеви. SSH клучевите обезбедуваат исклучително безбеден начин за најавување на вашиот сервер. Поради оваа причина, ова е методот што го препорачуваме за сите корисници.

Како функционираат SSH клучевите?

SSH серверот може да ги автентицира клиентите користејќи различни методи. Најосновното од нив е автентикацијата на лозинката, која е лесна за употреба, но не и најбезбедна.

Иако лозинките се испраќаат до серверот на безбеден начин, тие генерално не се сложени или доволно долги за да бидат отпорни на повторливи, постојани напаѓачи. Модерната процесорска моќ во комбинација со автоматизирани скрипти го прави многу возможно брутално принудување сметка заштитена со лозинка. Иако постојат и други методи за додавање дополнителна безбедност (fail2ban, итн.), SSH клучевите се покажуваат како сигурна и сигурна алтернатива.

SSH паровите клучеви се два криптографски безбедни клучеви кои можат да се користат за автентикација на клиент на SSH сервер. Секој пар клучеви се состои од јавен клуч и приватен клуч.

Приватниот клуч го задржува клиентот и треба да се чува апсолутно во тајност. Секој компромис на приватниот клуч ќе му овозможи на напаѓачот да се најави на серверите кои се конфигурирани со поврзаниот јавен клуч без дополнителна автентикација. Како дополнителна мерка на претпазливост, клучот може да се шифрира на дискот со лозинка.

Придружниот јавен клуч може слободно да се сподели без никакви негативни последици. Јавниот клуч може да се користи за шифрирање пораки што само приватниот клуч може да ги дешифрира. Ова својство се користи како начин за автентикација со користење на парот клучеви.

Јавниот клуч е поставен на оддалечен сервер на кој сакате да можете да се најавите со SSH. Клучот се додава во специјална датотека во корисничката сметка на која ќе се најавите, наречена ~/.ssh/authorized_keys.

Кога клиентот се обидува да се автентицира користејќи SSH клучеви, серверот може да го тестира клиентот дали го поседува приватниот клуч. Ако клиентот може да докаже дека го поседува приватниот клуч, се отвора сесија на школка или се извршува бараната команда.

Чекор 1 - Креирање SSH клучеви

Првиот чекор за конфигурирање на автентикација на SSH клучеви на вашиот сервер е да генерирате пар клучеви SSH на вашиот локален компјутер.

За да го направите ова, можеме да користиме специјална алатка наречена ssh-keygen, која е вклучена во стандардниот пакет алатки OpenSSH. Стандардно, ова ќе создаде 3072 битен RSA пар клучеви.

На вашиот локален компјутер, генерирајте пар клучеви SSH со внесување:

  1. ssh-keygen
Output
Generating public/private rsa key pair. Enter file in which to save the key (/home/username/.ssh/id_rsa):

Алатката ќе ве поттикне да изберете локација за копчињата што ќе се генерираат. Стандардно, клучевите ќе се складираат во директориумот ~/.ssh во домашниот директориум на вашиот корисник. Приватниот клуч ќе се вика id_rsa, а поврзаниот јавен клуч ќе се вика id_rsa.pub.

Вообичаено, најдобро е да се придржувате до стандардната локација во оваа фаза. Тоа ќе му овозможи на вашиот SSH клиент автоматски да ги пронајде вашите SSH клучеви кога се обидува да се автентицира. Ако сакате да изберете нестандардна патека, напишете ја сега, во спротивно, притиснете ENTER за да ја прифатите стандардната.

Ако претходно сте генерирале пар клучеви SSH, може да видите известување што изгледа вака:

Output
/home/username/.ssh/id_rsa already exists. Overwrite (y/n)?

Ако изберете да го презапишете клучот на дискот, веќе не ќе можете да се автентицирате користејќи го претходниот клуч. Бидете внимателни кога избирате да, бидејќи ова е деструктивен процес што не може да се врати назад.

Output
Created directory '/home/username/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again:

Следно, ќе биде побарано да внесете лозинка за клучот. Ова е изборна лозинка што може да се користи за шифрирање на датотеката со приватен клуч на дискот.

Можеби се прашувате какви предности дава клучот SSH ако сè уште треба да внесете лозинка. Некои од предностите се:

  • Приватниот SSH клуч (делот што може да биде заштитен со лозинка), никогаш не е изложен на мрежата. Преодната фраза се користи само за дешифрирање на клучот на локалната машина. Ова значи дека грубото форсирање базирано на мрежа нема да биде можно против лозинката.
  • Приватниот клуч се чува во ограничен директориум. Клиентот SSH нема да препознае приватни клучеви што не се чуваат во ограничени директориуми. Самиот клуч мора да има и ограничени дозволи (читање и пишување е достапно само за сопственикот). Ова значи дека другите корисници на системот не можат да прислушуваат.
  • Секој напаѓач што се надева дека ќе ја пробие лозинката за приватниот SSH клуч мора веќе да има пристап до системот. Ова значи дека тие веќе ќе имаат пристап до вашата корисничка сметка или до root сметката. Ако сте во оваа позиција, лозинката може да го спречи напаѓачот веднаш да се најави на вашите други сервери. Се надеваме дека ова ќе ви даде време да креирате и имплементирате нов пар клучеви SSH и да го отстраните пристапот од компромитираниот клуч.

Бидејќи приватниот клуч никогаш не е изложен на мрежата и е заштитен преку дозволи за датотеки, оваа датотека никогаш не треба да биде достапна за некој друг освен вас (и корисникот root). Преодната фраза служи како дополнителен слој на заштита во случај овие услови да бидат загрозени.

Преодната фраза е изборен додаток. Ако внесете еден, ќе мора да го давате секогаш кога ќе го користите овој клуч (освен ако користите софтвер за агент SSH што го складира дешифрираниот клуч). Препорачуваме да користите лозинка, но ако не сакате да поставите лозинка, можете да притиснете ENTER за да го заобиколите ова барање.

Output
Your identification has been saved in /home/username/.ssh/id_rsa. Your public key has been saved in /home/username/.ssh/id_rsa.pub. The key fingerprint is: SHA256:CAjsV9M/tt5skazroTc1ZRGCBz+kGtYUIPhRvvZJYBs username@hostname The key's randomart image is: +---[RSA 3072]----+ |o ..oo.++o .. | | o o +o.o.+... | |. . + oE.o.o . | | . . oo.B+ .o | | . .=S.+ + | | . o..* | | .+= o | | .=.+ | | .oo+ | +----[SHA256]-----+

Сега имате јавен и приватен клуч што можете да ги користите за автентикација. Следниот чекор е да го поставите јавниот клуч на вашиот сервер за да можете да користите SSH автентикација за да се најавите.

Чекор 2 - Копирање на јавен клуч SSH на вашиот сервер

Забелешка: претходната верзија на ова упатство имаше упатства за додавање јавен клуч SSH на вашата сметка на DigitalOcean. Тие упатства сега може да се најдат во делот SSH Keys од нашата документација за производот DigitalOcean.

Постојат повеќе начини да го поставите вашиот јавен клуч на вашиот оддалечен SSH сервер. Методот што го користите во голема мера зависи од алатките што ги имате на располагање и деталите за вашата моментална конфигурација.

Сите следниве методи го даваат истиот краен резултат. Наједноставниот, најавтоматизираниот метод е опишан прво, а оние што го следат секој бараат дополнителни рачни чекори. Треба да ги следите овие само ако не можете да ги користите претходните методи.

Копирање на вашиот јавен клуч користејќи ssh-copy-id

Наједноставниот начин да го копирате вашиот јавен клуч на постоечки сервер е да користите алатка наречена ssh-copy-id. Поради неговата едноставност, овој метод се препорачува доколку е достапен.

Алатката ssh-copy-id е вклучена во пакетите OpenSSH во многу дистрибуции, така што можеби веќе ја имате достапна на вашиот локален систем. За да функционира овој метод, моментално мора да имате SSH пристап заснован на лозинка до вашиот сервер.

За да ја користите алатката, треба да го наведете далечинскиот хост со кој сакате да се поврзете и корисничката сметка на која имате пристап за SSH базиран на лозинка. Ова е сметката каде што ќе се копира вашиот јавен SSH клуч.

Синтаксата е:

  1. ssh-copy-id username@remote_host

Може да видите ваква порака:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Ова значи дека вашиот локален компјутер не го препознава оддалечениот домаќин. Ова ќе се случи првиот пат кога ќе се поврзете со нов домаќин. Напишете да и притиснете ENTER за да продолжите.

Следно, алатката ќе ја скенира вашата локална сметка за клучот id_rsa.pub што го создадовме претходно. Кога ќе го пронајде клучот, ќе ве праша за лозинката на сметката на оддалечениот корисник:

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:

Внесете ја лозинката (вашето пишување нема да се прикаже за безбедносни цели) и притиснете ENTER. Алатката ќе се поврзе со сметката на оддалечениот домаќин користејќи ја лозинката што ја наведовте. Потоа ќе ја копира содржината на вашиот клуч ~/.ssh/id_rsa.pub во датотека во почетниот директориум ~/.ssh на оддалечената сметка наречена authorized_keys.

Ќе видите излез кој изгледа вака:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

Во овој момент, вашиот клуч id_rsa.pub е поставен на оддалечената сметка. Можете да продолжите на следниот дел.

Копирање на вашиот јавен клуч користејќи SSH

Ако немате достапен ssh-copy-id, но имате SSH пристап заснован на лозинка до сметка на вашиот сервер, можете да ги поставите вашите клучеви користејќи конвенционален SSH метод.

Можеме да го направиме ова со прикажување на содржината на нашиот јавен SSH клуч на нашиот локален компјутер и цевководство преку SSH врска до оддалечениот сервер. Од друга страна, можеме да се увериме дека директориумот ~/.ssh постои под сметката што ја користиме, а потоа да ја извадиме содржината што ја префрливме во датотека наречена authorized_keys во овој директориум.

Ќе го користиме симболот за пренасочување >> за да ја додадеме содржината наместо да ја презапишеме. Ова ќе ни овозможи да додаваме клучеви без да ги уништиме претходно додадените клучеви.

Целосната команда ќе изгледа вака:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Може да видите ваква порака:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Ова значи дека вашиот локален компјутер не го препознава оддалечениот домаќин. Ова ќе се случи првиот пат кога ќе се поврзете со нов домаќин. Напишете да и притиснете ENTER за да продолжите.

После тоа, ќе ви биде побарано лозинката на сметката со која се обидувате да се поврзете:

Output
username@203.0.113.1's password:

Откако ќе ја внесете лозинката, содржината на вашиот клуч id_rsa.pub ќе се копира на крајот од датотеката authorized_keys на сметката на оддалечениот корисник. Ако ова беше успешно, продолжете на следниот дел.

Рачно копирање на вашиот јавен клуч

Ако немате достапен SSH пристап до вашиот сервер базиран на лозинка, ќе мора рачно да го направите горенаведениот процес.

Содржината на вашата датотека id_rsa.pub ќе мора некако да се додаде во датотека на ~/.ssh/authorized_keys на вашата оддалечена машина.

За да ја прикажете содржината на вашиот клуч id_rsa.pub, напишете го ова на вашиот локален компјутер:

  1. cat ~/.ssh/id_rsa.pub

Ќе ја видите содржината на клучот, која може да изгледа вака:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== username@hostname

Пристапете до вашиот далечински хост користејќи кој било метод што го имате на располагање. Ова може да е веб-базирана конзола обезбедена од вашиот давател на инфраструктура.

Забелешка: ако користите DigitalOcean Droplet, погледнете ја нашата документација за конзолата за обновување во документите на производот DigitalOcean.

Откако ќе имате пристап до вашата сметка на оддалечениот сервер, треба да бидете сигурни дека директориумот ~/.ssh е создаден. Оваа команда ќе го создаде директориумот ако е потребно, или не прави ништо ако веќе постои:

  1. mkdir -p ~/.ssh

Сега, можете да ја креирате или менувате датотеката authorized_keys во овој директориум. Можете да ја додадете содржината на вашата датотека id_rsa.pub на крајот од датотеката authorized_keys, креирајќи ја доколку е потребно, користејќи го ова:

  1. echo public_key_string >> ~/.ssh/authorized_keys

Во горната команда, заменете ја public_key_string со излезот од командата cat ~/.ssh/id_rsa.pub што сте ја извршиле на вашата локална систем. Треба да започне со ssh-rsa AAAA... или слично.

Ако ова функционира, можете да продолжите да ја тестирате вашата нова SSH автентикација базирана на клуч.

Чекор 3 - Автентикација на вашиот сервер користејќи клучеви SSH

Ако успешно сте завршиле една од горенаведените процедури, треба да можете да се најавите во далечинскиот хост без лозинката на далечинската сметка.

Процесот е главно ист:

  1. ssh username@remote_host

Ако ова е ваш прв пат да се поврзете со овој домаќин (ако сте го користеле последниот метод погоре), може да видите нешто како ова:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Ова значи дека вашиот локален компјутер не го препознава оддалечениот домаќин. Напишете да и потоа притиснете ENTER за да продолжите.

Ако не сте дале лозинка за вашиот приватен клуч, веднаш ќе бидете најавени. Ако сте дале лозинка за приватниот клуч кога сте го создале клучот, ќе треба да ја внесете сега. После тоа, ќе се креира нова сесија на школка за вас со сметката на далечинскиот систем.

Доколку е успешна, продолжете за да дознаете како да го заклучите серверот.

Чекор 4 - Оневозможување на автентикација со лозинка на вашиот сервер

Ако можевте да се најавите на вашата сметка користејќи SSH без лозинка, успешно сте ја конфигурирале автентикацијата заснована на клучеви SSH на вашата сметка. Сепак, вашиот механизам за автентикација базиран на лозинка е сè уште активен, што значи дека вашиот сервер сè уште е изложен на напади со брутална сила.

Пред да ги завршите чекорите во овој дел, проверете дали имате конфигурирана автентикација заснована на SSH клуч за root сметката на овој сервер, или по можност, дека имате конфигурирана автентикација базирана на SSH за сметка на овој сервер со пристап sudo. Овој чекор ќе ги заклучи најавувањата засновани на лозинка, па затоа е од суштинско значење да се осигурате дека сè уште ќе можете да добиете административен пристап.

Откако горенаведените услови се точни, најавете се на вашиот далечински сервер со SSH клучеви, или како root или со сметка со привилегии sudo. Отворете ја конфигурациската датотека на SSH демонот:

  1. sudo nano /etc/ssh/sshd_config

Внатре во датотеката, побарајте директива наречена PasswordAuthentication. Ова може да се коментира. Декоментирајте ја линијата со отстранување на кој било # на почетокот на линијата и поставете ја вредноста на no. Ова ќе ја оневозможи вашата способност да се најавите преку SSH користејќи лозинки на сметката:

PasswordAuthentication no

Зачувајте ја и затворете ја датотеката кога ќе завршите. За да ги имплементирате промените што штотуку ги направивме, мора да ја рестартирате услугата.

На повеќето дистрибуции на Linux, можете да ја издадете следнава команда за да го направите тоа:

  1. sudo systemctl restart ssh

Откако ќе го завршите овој чекор, успешно го префрливте вашиот SSH демон да одговара само на SSH клучеви.

Заклучок

Сега треба да имате конфигурирана автентикација базирана на SSH клуч и да работи на вашиот сервер, што ќе ви овозможи да се најавите без да обезбедите лозинка за сметката. Од тука, има многу насоки на кои можете да се упатите. Ако сакате да дознаете повеќе за работата со SSH, погледнете го нашиот водич за најважен SSH.