За что админы любят SSH
vk f t

За что админы любят SSH

И поче­му вам тоже нуж­но его полю­бить.

Пред­ста­вим ситу­а­цию: ваш сайт пере­стал рабо­тать, панель управ­ле­ния хостин­гом не откры­ва­ет­ся, а вам нуж­но всё почи­нить. Или такое: вы рабо­та­е­те в Брян­ске, ваш заказ­чик — в Сык­тыв­ка­ре, и у него сло­мал­ся интернет-магазин на соб­ствен­ном сер­ве­ре.

Тут два вари­ан­та: мож­но физи­че­ски при­е­хать в нуж­ный город, под­клю­чить кла­ви­а­ту­ру к сер­ве­ру и испра­вить всё на месте. А мож­но под­клю­чить­ся к сер­ве­ру уда­лён­но по SSH и поис­прав­лять все ошиб­ки, попи­вая сок у себя в квар­та­ле (в Брян­ске).

SSH — это защи­щён­ный про­то­кол, по кото­ро­му ком­пью­те­ры могут отправ­лять друг дру­гу коман­ды и дан­ные. В нашем слу­чае с помо­щью SSH мож­но уда­лён­но управ­лять каким-нибудь ком­пью­те­ром: давать ему коман­ды, испол­нять на нём про­грам­мы и делать что угод­но ещё, что поз­во­лит нам команд­ная стро­ка. Если уда­лось свя­зать­ся с ком­пью­те­ром по SSH, то это как буд­то вы под­клю­чи­ли к уда­лён­но­му ком­пью­те­ру свою кла­ви­а­ту­ру.

Командная строка

Если вы под­клю­чи­тесь к дру­го­му ком­пью­те­ру по SSH, вы не уви­ди­те там рабо­чий стол и окна про­грамм. Вы уви­ди­те чёр­ный экран и стро­ки тек­ста. Это нор­маль­но. Это назы­ва­ет­ся команд­ной стро­кой. Сей­час вы пой­мё­те.

Когда вы рабо­та­е­те за ком­пью­те­ром, вы обыч­но види­те окна, кноп­ки, стра­ни­цы и всё подоб­ное. Это назы­ва­ет­ся гра­фи­че­ским интер­фей­сом.

Гра­фи­че­ский интер­фейс — это не сами про­грам­мы. Это лишь спо­соб пред­став­ле­ния про­грам­мы. Сама про­грам­ма — это то, что испол­ня­ет­ся внут­ри ком­пью­те­ра: то, что счи­та­ет, копи­ру­ет, обра­ба­ты­ва­ет и так далее. Есть огром­ное коли­че­ство про­грамм без гра­фи­че­ско­го интер­фей­са: напри­мер, веб-сервер Apache — это про­грам­ма. Сер­вер рабо­та­ет на вашем ком­пью­те­ре, зани­ма­ет память, выда­ёт стра­ни­цы куда нуж­но, ведёт свою сер­вер­ную рабо­ту, но у него нет гра­фи­че­ско­го интер­фей­са — нет ника­ко­го окош­ка, на кото­рое вы може­те ска­зать «Это сер­вер».

Или, напри­мер, ваш бра­у­зер. Если у вас Chrome, то вы види­те окно с веб-страницей. А есть вер­сия Headless Chrome, кото­рая может выплё­вы­вать любые стра­ни­цы в виде кар­ти­нок пря­мо на ваш жёст­кий диск. У это­го «Хро­ма» нет гра­фи­че­ско­го интер­фей­са со стра­ни­цей (но есть неболь­шой интер­фейс для настрой­ки).

С нашей чело­ве­че­ской точ­ки зре­ния интер­фейс — это и есть про­грам­ма. А с точ­ки зре­ния ком­пью­те­ра интер­фейс — это что-то побоч­ное. И опыт­ные про­грам­ми­сты доволь­но часто исполь­зу­ют в рабо­те про­грам­мы, у кото­рых нет гра­фи­че­ско­го интер­фей­са, толь­ко команд­ная стро­ка.

Команд­ная стро­ка — это тек­сто­вый интер­фейс про­грам­мы. Вы вво­ди­те в эту стро­ку коман­ду, про­грам­ма может в ответ что-то вас спро­сить тек­стом, вы ей тек­стом отве­ти­те, и про­грам­ма сде­ла­ет свою рабо­ту. Мы уже стал­ки­ва­лись с команд­ной стро­кой, когда соби­ра­ли своё при­ло­же­ние в элек­троне или объ­яс­ня­ли, как устро­ен интер­нет:

Здесь в команд­ной стро­ке поль­зо­ва­тель maximilyakhov на ком­пью­те­ре iMac-Maxim выпол­нил коман­ду ping для адре­са thecode.media — то есть про­ве­рил, откли­ка­ет­ся ли сер­вер с нашим сай­том. Это вид­но из вто­рой стро­ки. Про­грам­ма Ping ста­ла пока­зы­вать ста­ти­сти­ку: полу­чи­ли паке­ты по 64 бай­та за 79 мс. Поль­зо­ва­тель удо­вле­тво­рил­ся резуль­та­том, вышел из про­грам­мы кла­ви­шей Ctrl+C и полу­чил ито­го­вую ста­ти­сти­ку. Сей­час команд­ная стро­ка гото­ва к новым коман­дам

Быва­ют и дру­гие интер­фей­сы про­грамм. Напри­мер, может быть голо­со­вой интер­фейс: ком­пью­тер вас слу­ша­ет, интер­пре­ти­ру­ет коман­ды, зада­ёт вам вопро­сы голо­сом.

Может быть интер­фейс в виде чата. Вме­сто того что­бы давать тек­сто­вые коман­ды в команд­ной стро­ке, вы пише­те коман­ды чат-боту.

Может быть даже физи­че­ский интер­фейс: когда вы игра­е­те в при­став­ку, вы даё­те коман­ду с помо­щью джой­сти­ка или каких-нибудь палок с дат­чи­ка­ми. Когда в вас попа­да­ют вра­ги, джой­сти­ки могут виб­ри­ро­вать — это при­став­ка вам пыта­ет­ся что-то ска­зать. Так что гра­фи­че­ский интер­фейс — это лишь одна из раз­но­вид­но­стей.

SSH-соединение

Основ­ной прин­цип рабо­ты такой: SSH-клиент на ком­пью­те­ре соеди­ня­ет­ся с SSH-сервером, они убеж­да­ют­ся, что каж­дый имен­но тот, за кого себя выда­ёт, дого­ва­ри­ва­ют­ся о шиф­ро­ва­нии и после это­го уста­нав­ли­ва­ют защи­щён­ный тун­нель для пере­да­чи команд. Важ­но пони­мать, что сер­вер — это про­сто такое назва­ние для уда­лён­но­го ком­пью­те­ра. Сер­ве­ром может быть и домаш­ний ноут­бук, и пла­та на Raspberry Pi.

Запуск SSH-клиента

Если у вас один из вари­ан­тов линук­са, BSD, UNIX или Мак — поздрав­ля­ем, SSH-клиент у вас уже есть. Для его запус­ка доста­точ­но набрать в команд­ной стро­ке что-то подоб­ное:

ssh login@11.22.33.44

Здесь login — это имя поль­зо­ва­те­ля, под кото­рым вы хоти­те зай­ти на сер­вер, а 11.22.33.44 — IP-адрес это­го сер­ве­ра. Чаще все­го исполь­зу­ет­ся 22 порт, но ино­гда эта настрой­ка может менять­ся.

Порт — это что-то вро­де номе­ра марш­рут­ки, кото­рая идёт по горо­ду. Все при­вык­ли, что если нуж­но «дое­хать» до SSH, то садят­ся на марш­рут­ку номер 22. Но ино­гда началь­ник город­ско­го транс­пор­та (адми­ни­стра­тор) может поме­нять номер, тогда вме­сто 22-й марш­рут­ки нуж­но будет садить­ся, напри­мер, на 320-ю.

У Вин­до­ус нет встро­ен­но­го SSH-клиента, поэто­му нуж­но ска­чать его отдель­но. Чаще все­го выби­ра­ют PyTTY — SSH-клиент с гра­фи­че­ской обо­лоч­кой, в кото­рой мож­но настра­и­вать пара­мет­ры соеди­не­ния:

Мини­маль­но нуж­но ука­зать адрес сер­ве­ра, 22 порт уже напи­сан по умол­ча­нию.

Обмен ключами шифрования

Когда мы запус­ка­ем SSH-клиент и гово­рим ему соеди­нить­ся с нуж­ным сер­ве­ром, про­ис­хо­дит сле­ду­ю­щее:

Если всё про­шло штат­но, то при самом пер­вом под­клю­че­нии сер­вер при­шлёт в ответ что-то вро­де это­го:

The authenticity of host '11.22.33.44 (11.22.33.44)' 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

Здесь сер­вер спра­ши­ва­ет, точ­но ли мы хотим уста­но­вить это соеди­не­ние. Если да — вво­дим в ответ yes. Это зна­чит, что мы полу­чи­ли уни­каль­ный «отпе­ча­ток паль­цев» для наше­го соеди­не­ния. Теперь, когда поме­ня­ют­ся настрой­ки SSH-сервера или его пол­но­стью пере­уста­но­вят, отпе­ча­ток уже не сов­па­дёт и кли­ент будет бить тре­во­гу. Всё для того, что­бы сде­лать соеди­не­ния более без­опас­ны­ми в буду­щем.

Доступ по паролю или ключу

У нас уже есть защи­щён­ное соеди­не­ние, и теперь мы можем вво­дить пароль. Для это­го, после запус­ка нашей коман­ды или кли­ен­та, SSH-сервер при­сы­ла­ет в ответ такое:

login@11.22.33.44’s password:

Это зна­чит, что нам нуж­но вве­сти пароль от поль­зо­ва­те­ля с име­нем login. Пароль вво­дит­ся каж­дый раз, когда мы уста­нав­ли­ва­ем SSH-соединение.

Есть и дру­гой спо­соб дока­зать сер­ве­ру, что вы име­е­те пра­во под­клю­чать­ся к нему: клю­чи досту­па. Если настро­ить доступ по клю­чу, то пароль уже не нужен. Глав­ное — нигде не пуб­ли­ко­вать при­ват­ный ключ. О клю­чах сей­час гово­рить не будем, слож­но­ва­то.

Теперь соеди­не­ние уста­нов­ле­но, мож­но управ­лять уда­лён­ным ком­пью­те­ром, сидя у себя дома. Имен­но за это SSH и любят адми­ны: лако­нич­ный и понят­ный (для них) интер­фейс, про­сто­та рабо­ты и пол­ная без­опас­ность при гра­мот­ной настрой­ке.

Что можно делать с помощью SSH

Всё, что мож­но было бы делать, если бы вы сиде­ли за ком­пью­те­ром, открыв команд­ную стро­ку:

Вот несколь­ко при­ме­ров из реаль­ной жиз­ни:

У вас намерт­во завис про­цесс веб-сервера на уда­лён­ном ком­пью­те­ре, и ника­кие внут­рен­ние служ­бы не могут с ним ниче­го сде­лать. Под­клю­ча­е­тесь по SSH, нахо­ди­те завис­ший про­цесс и уби­ва­е­те его. А то и гово­ри­те машине пере­за­гру­зить­ся.

В офис вашей ком­па­нии ворва­лись бой­цы в мас­ках. Пока они идут в сер­вер­ную, вы наби­ра­е­те коман­ду сте­реть все жёст­кие дис­ки. Коман­да по SSH доле­та­ет до сер­ве­ра, и вуа­ля. Гос­по­да в мас­ках оста­нут­ся не при делах.

Вы напи­са­ли телеграм-бота и хоти­те, что­бы он рабо­тал на уда­лён­ном сер­ве­ре. Вы арен­ду­е­те ячей­ку на Digital Ocean, под­клю­ча­е­тесь к ней по SSH, загру­жа­е­те ваше­го бота туда и акти­ви­ру­е­те. Теперь про­грам­ма, кото­рая отве­ча­ет за бота, кру­тит­ся на уда­лён­ном сер­ве­ре, а ваш ком­пью­тер мож­но без­опас­но выклю­чить.

Вы уже ушли с рабо­ты, как вдруг вспом­ни­ли, что забы­ли ски­нуть в общий про­ект свои послед­ние изме­не­ния. Пока вы ждё­те мет­ро, вы с теле­фо­на захо­ди­те по SSH на рабо­чий ком­пью­тер и пише­те коман­ды, что­бы послед­ние изме­не­ния доле­те­ли до кол­лег.

У вашей девуш­ки (или пар­ня) сего­дня день рож­де­ния. Вы под­клю­ча­е­тесь к её ком­пью­те­ру дистан­ци­он­но, загру­жа­е­те при­ло­же­ние с поздрав­ле­ни­ем и уда­лён­но запус­ка­е­те. Это очень кри­по­во, не делай­те так нико­гда.

У вас в офи­се есть кофе­ма­ши­на, кото­рая под­дер­жи­ва­ет SSH. Вы под­клю­ча­е­тесь к ней и зака­зы­ва­е­те кофе. К момен­ту, как вы дохо­ди­те до кофе­пойн­та, ваш кофе готов. Но кто под­ста­вит круж­ку?

Ещё по теме