Како да ги конфигурирате сопствените опции за поврзување за вашиот клиент SSH


Вовед

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

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

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

Предуслови

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

Структура на конфигурација на датотеката SSH и алгоритам за толкување

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

Локацијата на датотеката за конфигурација на клиентот SSH

Конфигурациската датотека од страна на клиентот се наоѓа на ~/.ssh/config - ~ е универзална кратенка до вашиот домашен директориум. Често, оваа датотека не е стандардно креирана, па можеби ќе треба сами да ја креирате. Командата touch ќе ја создаде ако не постои (и ќе го ажурира последниот изменет временски печат ако постои).

  1. touch ~/.ssh/config

Структура на конфигурациска датотека

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

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

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

Општиот формат ќе изгледа вака:

Host firsthost
    Hostname your-server.com
    User username-to-connect-as
    IdentityFile /path/to/non/default/keys.pem

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

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

Алгоритам за толкување

Важно е да се разбере начинот на кој SSH ќе ја интерпретира датотеката за да ги примени конфигурациските вредности. Ова има импликации кога се користат џокери и генеричката дефиниција за домаќин Домаќин *.

SSH ќе одговара на името на домаќинот дадено на командната линија со секое од заглавјата Host што ги дефинира секциите за конфигурација.

На пример, разгледајте ја оваа дефиниција:

Host devel
    HostName devel.example.com
    User tom

Овој домаќин ни овозможува да се поврземе како tom@devel.example.com со впишување на ова на командната линија:

  1. ssh devel

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

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

Ова е важна точка. SSH ќе го интерпретира секој од секциите Host што одговара на името на домаќинот дадено во командната линија, по редослед. За време на овој процес, секогаш ќе ја користи првата вредност дадена за секоја опција. Не постои начин да се отфрли вредност што е веќе дадена од претходно совпаднат дел.

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

Да го погледнеме повторно примерот од претходниот дел:

Host firsthost
    Hostname your-server.com
    User username-to-connect-as
    IdentityFile /path/to/non/default/keys.pem

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

Овде, можеме да видиме дека првите два дела се дефинирани со буквални имиња на домаќини (или псевдоними), што значи дека тие не користат никакви знаци. Ако се поврземе користејќи ssh firsthost, првиот дел ќе биде првиот што ќе се примени. Ова ќе постави Име на домаќин, Корисник и IdentityFile за оваа врска.

Ќе го провери вториот дел и ќе открие дека не се совпаѓа и ќе продолжи понатаму. Потоа ќе го најде третиот дел и ќе открие дека се совпаѓа. Ќе го провери ANOTHER_OPTION за да види дали веќе има вредност за тоа од претходните секции. Откривајќи дека не, ќе ја примени вредноста од овој дел. Потоа ќе одговара на последниот дел бидејќи дефиницијата Домаќин * одговара на секоја врска. Бидејќи нема вредност за лажната опција CHANGE_DEFAULT од другите секции, ќе ја земе вредноста од овој дел. Поврзувањето потоа се прави со опциите собрани од овој процес.

Ајде да го пробаме ова повторно, преправајќи се дека го повикуваме ssh secondhost од командната линија.

Повторно, ќе започне во првиот дел и ќе провери дали се совпаѓа. Бидејќи ова се совпаѓа само со врската со firsthost, ќе го прескокне овој дел. Ќе се префрли на вториот дел. Откако ќе открие дека овој дел се совпаѓа со барањето, ќе ја собере вредноста на ANOTHER_OPTION за оваа врска.

SSH потоа ја разгледува третата дефиниција и открива дека џокерот се совпаѓа со моменталната врска. Потоа ќе провери дали веќе има вредност за ANOTHER_OPTION. Бидејќи оваа опција беше дефинирана во вториот дел, кој веќе беше усогласен, вредноста од третиот дел е отфрлена и нема ефект.

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

Опции за поврзување

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

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

За да се поврзете како корисник по име apollo со домаќин наречен example.com кој го извршува својот SSH демон на портата 4567 од командната линија, можете извршете го ssh вака:

ssh -p 4567 apollo@example.com

Сепак, можете да ги користите и имињата на целосните опции со знамето -o, вака:

ssh -o "User=apollo" -o "Port=4567" -o "HostName=example.com"

Можете да најдете целосен список на достапни опции на страницата со прирачник за SSH.

За да ги поставите овие во вашата датотека config, треба да изберете име на заглавие Host, како home:

Host home
    HostName example.com
    User apollo
    Port 4567

Вообичаени опции за конфигурација на SSH

Досега разговаравме за некои од опциите неопходни за воспоставување врска. Ги опфативме овие опции:

  • HostName: вистинското име на домаќинот што треба да се користи за воспоставување на врската. Ова го заменува секој псевдоним дефиниран во заглавието Домаќин. Оваа опција не е неопходна ако дефиницијата Хост ја одредува вистинската валидна адреса на која треба да се поврзете.
  • Корисник: корисничкото име што ќе се користи за врската.
  • Порта: порта на која работи далечинскиот SSH демон. Оваа опција е неопходна само ако далечинскиот примерок на SSH не работи на стандардната порта 22.

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

Општи измени и ставки за поврзување

  • ServerAliveInterval: оваа опција може да се конфигурира за да му даде до знаење на SSH кога да испрати пакет за тестирање за одговор од серверот. Ова може да биде корисно ако вашата врска е несигурна и сакате да знаете дали е сè уште достапна.
  • LogLevel: Ова го конфигурира нивото на детали во кое SSH ќе се најавува на клиентската страна. Ова може да се користи за исклучување на најавување во одредени ситуации или за зголемување на гласноста кога се обидувате да дебагирате. Од најмалку до најразбирливи, нивоата се ТИВКИ, ФАТАЛНИ, ГРЕШКИ, ИНФО, VERBOSE, DEBUG1, DEBUG2 и DEBUG3.
  • StrictHostKeyChecking: оваа опција конфигурира дали ssh SSH некогаш автоматски ќе додава хостови во датотеката ~/.ssh/known_hosts. Стандардно, ова ќе биде поставено на \прашај што значи дека ќе ве предупреди ако клучот на домаќинот добиен од оддалечениот сервер не се совпаѓа со оној што се наоѓа во датотеката known_hosts. Ако постојано се поврзувате на голем број ефемерни хостови (како сервери за тестирање), можеби ќе сакате да го претворите ова во \не. SSH потоа автоматски ќе додаде кој било хост во датотеката. Ова може да има безбедносни импликации ако вашите познати домаќини некогаш ги менуваат адресите кога не треба, затоа размислете внимателно пред да го овозможите тоа.
  • UserKnownHostsFile: оваа опција ја одредува локацијата каде што SSH ќе ги складира информациите за хостовите на кои се поврзал. Обично не треба да се грижите за оваа поставка, но можеби ќе сакате да ја поставите на /dev/null за да бидат отфрлени ако сте ја исклучиле строгата проверка на домаќинот погоре.
  • VisualHostKey: оваа опција може да му каже на SSH да прикаже ASCII претстава на клучот на оддалечениот домаќин при поврзувањето. Вклучувањето на ова може да биде корисен начин да се запознаете со клучот на вашиот домаќин, што ќе ви овозможи да го препознаете ако некогаш во иднина треба да се поврзете од друг компјутер.
  • Компресија: Вклучувањето на компресија може да биде корисно за многу бавни врски. На повеќето корисници ова нема да им треба.

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

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

Host home
    VisualHostKey yes

Host cloud*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel QUIET

Host *
    StrictHostKeyChecking ask
    UserKnownHostsFile ~/.ssh/known_hosts
    LogLevel INFO
    ServerAliveInterval 120

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

Препраќање на врската

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

Опциите што го контролираат ова однесување се:

  • LocalForward: оваа опција се користи за одредување на врска што ќе го проследи сообраќајот на локалната порта до оддалечената машина, тунелизирајќи ја во далечинската мрежа. Првиот аргумент треба да биде локалната порта до која сакате да го насочите сообраќајот, а вториот аргумент треба да биде адресата и портата до кои сакате да го насочите тој сообраќај на оддалечениот крај.
  • RemoteForward: оваа опција се користи за дефинирање на далечинска порта каде што може да се насочи сообраќајот за да се тунелира надвор од локалната машина. Првиот аргумент треба да биде далечинскиот приклучок каде сообраќајот ќе биде насочен на далечинскиот систем. Вториот аргумент треба да биде адресата и портата на која ќе се насочи сообраќајот кога ќе пристигне на локалниот систем.
  • DynamicForward: Ова се користи за конфигурирање на локална порта што може да се користи со протокол за динамично проследување како SOCKS5. Сообраќајот со помош на протоколот за динамичко препраќање потоа може да се насочи кон оваа порта на локалната машина и на далечинскиот крај, ќе се насочува според вклучените вредности.

Овие опции може да се користат за препраќање порти во двете насоки, како што можете да видите овде:

# This will allow us to use port 8080 on the local machine
# in order to access example.com at port 80 from the remote machine
Host local_to_remote
    LocalForward 8080 example.com:80

# This will allow us to offer access to internal.com at port 443
# to the remote machine through port 7777 on the other side
Host remote_to_local
    RemoteForward 7777 internal.com:443

Ова е особено корисно кога треба да отворите прозорец на прелистувачот на приватна контролна табла или друга веб-апликација што работи на сервер што не е директно достапен освен преку SSH.

Друго препраќање

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

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

Ова се директивите кои се поврзани со овие способности:

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

Одредување клучеви

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

  • IdentityFile: оваа опција може да се користи за да се одреди локацијата на клучот што ќе се користи за секој домаќин. SSH стандардно ќе користи клучеви лоцирани во ~/.ssh, но ако ви се доделени клучеви по сервер, ова може да се користи за да се одреди точната патека каде што може да се најдат.
  • IdentitiesOnly: оваа опција може да се користи за да се принуди SSH да се потпира само на идентитетите дадени во датотеката config. Ова може да биде неопходно ако SSH агентот има алтернативни клучеви во меморијата кои не се валидни за дотичниот хост.

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

Заклучок

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

Ако некогаш треба да користите SSH преку многу лоша или наизменична врска, како што е авионската Wi-Fi, може да се обидете да користите и mosh, која е дизајнирана да направи SSH да работи под неповолни околности.