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


Вовед

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

Забелешка: од 1 јули 2022 година, DigitalOcean повеќе не поддржува создавање нови FreeBSD Droplets преку контролниот панел или API. Сепак, сè уште можете да ги вртите FreeBSD Droplets користејќи приспособена слика. Научете како да увезете приспособена слика во DigitalOcean следејќи ја нашата документација за производот.

Како функционираат копчињата SSH

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

Проблемот со лозинките е што тие обично се креираат рачно, без доволна должина или сложеност во содржината. Затоа, тие можат да бидат подложни на компромитирање од напади со брутална сила. SSH клучевите обезбедуваат сигурна безбедна алтернатива.

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

приватниот клуч делува слично како лозинката и се чува на клиентскиот компјутер. Неговата содржина мора да се чува во тајност - ако неовластено лице добие пристап до вашиот приватен клуч, тој треба да се смета за компромитиран и веднаш да се замени. Приватниот клуч обично е со должина од најмалку 2048 бита и може опционално да се шифрира со лозинка (во основа лозинка која е потребна за користење на приватниот клуч) за да се ограничи неговата употреба во случај неовластено лице да добие пристап до клучот.

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

За да се овозможи употреба на приватен клуч за автентикација, соодветниот јавен клуч се инсталира на сметката на корисникот на оддалечен сервер. Јавниот клуч мора да се додаде во специјална датотека во домашниот директориум на оддалечениот корисник наречен .ssh/authorized_keys. Кога клиентот се обидува да се поврзе со оддалечениот сервер, серверот може да потврди дали клиентот има приватен клуч што одговара на еден од авторизираните клучеви - ако приватниот клуч е потврден дека одговара на овластен јавен клуч, клиентот е автентициран и Сесијата на школка е лансирана.

Како да креирате пар клучеви SSH

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

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

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

ssh-keygen

Ќе видите излез како што следува:

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 клиент автоматски да ги пронајде вашите SSH клучеви кога се обидува да се автентицира. Ако сакате да изберете нестандардна патека, напишете ја сега, инаку, оставете го празно барањето и притиснете RETURN за да го прифатите стандардното.

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

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

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

Во овој момент, треба да видите барање за лозинка:

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

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

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

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

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

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

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

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

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

Ако ја имате алатката ssh-copy-id на вашиот локален компјутер, можете да ја користите за лесно додавање јавен SSH клуч на оддалечен сервер до кој имате пристап за SSH базиран на лозинка. Услугата ssh-copy-id често, но не секогаш, е вклучена во пакетот OpenSSH (истиот што обезбедува ssh и ssh-keygen).

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

За да користите ssh-copy-id, мора да ја наведете IP адресата или името на доменот на оддалечениот домаќин и корисникот на кој ќе го додадете јавниот SSH клуч. Може да се работи вака (заменете ги означените делови со соодветни информации):

ssh-copy-id username@remote_host

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

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

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

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

/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@111.222.11.222's password:

Внесете ја лозинката, а потоа притиснете RETURN. Алатката ќе се поврзе со корисничката сметка на оддалечениот хост и ќе го инсталира вашиот јавен клуч, id_rsa.pub. Клучот се инсталира со копирање на содржината на вашиот јавен клуч во датотека наречена .ssh/authorized_keys во домашниот директориум на оддалечениот корисник.

Ако копијата е успешна, ќе видите излез како овој:

Number of key(s) added: 1

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

Бидејќи вашиот јавен клуч е инсталиран во датотеката authorized_keys на оддалечениот корисник, соодветниот приватен клуч (id_rsa на вашиот локален компјутер) ќе биде прифатен како автентикација за корисникот на оддалечениот сервер .

Продолжете во делот Автентикација на вашиот сервер користејќи клучеви SSH за да се најавите на вашиот сервер користејќи клучеви SSH.

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

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

Овој метод работи со излегување на јавниот SSH клуч на вашиот локален компјутер и цевководство преку SSH до серверот за отстранување. На оддалечениот сервер, извршуваме неколку команди за да го создадеме директориумот ~/.ssh, ако тој веќе не постои, а потоа го додаваме јавниот клуч во датотека наречена authorized_keys во директориумот. Ќе го користиме пренасочувањето >> за да го додадеме клучот на датотеката authorized_keys, доколку веќе постои, во случај некои јавни SSH клучеви да се веќе инсталирани на сметката на оддалечениот корисник ( така што тие нема да бидат препишани и отстранети како овластени клучеви).

Претпоставувајќи дека вашиот јавен клуч го има стандардното име, id_rsa.pub, тука е командата за инсталирање на јавниот SSH клуч (замена на далечинскиот корисник и домаќин):

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

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

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

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

Сега ќе ви биде побарано лозинката на далечинскиот корисник:

username@111.222.11.222's password:

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

Продолжете во делот Автентикација на вашиот сервер користејќи клучеви SSH за да се најавите на вашиот сервер користејќи клучеви SSH.

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

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

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

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

ssh username@remote_host

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

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

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

Сега ќе ви биде побарано лозинката на далечинскиот корисник:

Password for username@111.222.11.222:

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

mkdir -p ~/.ssh

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

cat ~/.ssh/id_rsa.pub

Копирајте го излезот во вашата таблата со исечоци, а потоа отворете ја датотеката authorized_keys во текстуалниот уредувач по ваш избор. Ќе користиме ee овде:

ee ~/.ssh/authorized_keys

Залепете го вашиот јавен клуч во датотеката authorized_keys, а потоа зачувајте и излезете. Ако користите ee, зачувајте и излезете со притискање на ESC проследено со a потоа повторно a.

Вашиот јавен SSH клуч сега е инсталиран на оддалечениот сервер. Продолжете на следниот дел за да се најавите на вашиот сервер користејќи клучеви SSH.

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

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

Обидете се да се најавите на оддалечениот сервер користејќи SSH:

ssh username@remote_host

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

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

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

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

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

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

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

sudo ee /etc/ssh/sshd_config

Во датотеката, пронајдете директива наречена ChallengeResponseAuthentication. Може да се коментира. Отстранете го коментарот на линијата, со отстранување на знакот #, а потоа поставете ја вредноста на \не. Треба да изгледа вака кога ќе завршите:

ChallengeResponseAuthentication no

Зачувајте ја и затворете ја датотеката. Ако користите ee, зачувајте и излезете со притискање на ESC проследено со a потоа повторно a.

За да стапат на сила промените, мора да ја рестартирате услугата sshd. За да го рестартирате SSH демонот на FreeBSD, користете ја оваа команда:

sudo service sshd restart

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

Заклучок

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