Переустановка linux через ssh

Обновлено: 07.07.2024

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

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

Что такое SSH?

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

За поддержку протокола SSH в Linux отвечает набор программного обеспечения OpenSSH. Это открытая реализация этого протокола, которая предоставляет все необходимые возможности. В состав пакета OpenSSH входят утилиты для установки соединения, передачи файлов, а также сам ssh сервер.

Установка OpenSSH в Ubuntu

Установить SSH на Ubuntu будет очень просто, программа считается стандартной и используется почти везде. Хотя по умолчанию в дистрибутиве её нет, но зато она есть в официальных репозиториях.

Поэтому для установки откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и выполните команду:

sudo apt install openssh-server

ssh

Будет загружено несколько пакетов, а когда установка ssh сервера Ubuntu завершится, программа будет готова к работе. Если вы хотите чтобы служба запускалась автоматически нужно добавить его в автозагрузку. Поэтому чтобы включить SSH в Ubuntu 20.04 выполните:

sudo systemctl enable sshd

ssh1

Если затем вы захотите удалить службу из автозагрузки, используйте команду disable:

sudo systemctl disable sshd

Что касается клиента ssh, то он уже установлен в системе по умолчанию. Сейчас вы можете попробовать подключиться к локальному ssh серверу просто набрав:

ssh3

В одной из предыдущих статей мы рассматривали что означает адрес 0.0.0.0, сейчас вы можете убедиться что в пределах этой машины он значит локальный адрес:

ssh2

Точно таким способом вы можете получить ssh доступ ubuntu к любому другому компьютеру из сети. Для этого достаточно указать вместо localhost его ip адрес и имя пользователя в таком формате:

$ ssh имя_пользователя @ ip_адрес

Настройка SSH в Ubuntu

С параметрами по умолчанию сервер SSH не очень безопасен поэтому перед тем, как программа будет готова к полноценному использованию ее нужно немного настроить. Все настройки сервера SSH хранятся в конфигурационном файле sshd_config, который находится в папке /etc/ssh.

Перед тем как вносить изменения в этот конфигурационный файл рекомендуется сделать его резервную копию, для этого можете использовать такую команду:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults

Дальше вы можете перейти к настройке конфигурационного файла:

sudo vi /etc/ssh/sshd_config

Первым делом желательно сменить порт, на котором работает ssh, возможный злоумышленник не знал включен ли у вас этот сервис. Найдите в конфигурационном файле строчку Port и замените ее значение на любое число, например, Port 2222:

ssh4

По умолчанию вход от имени суперпользователя включен, рекомендуется отключить такую возможность. Для этого найдите строчку PermitRootLogin и замените ее значение на no:

ssh5

Чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.

ssh6

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

sudo systemctl restart ssh

Более подробно про настройку и использование различных тонкостей ssh рассказано в статье как использовать ssh.

Если вы изменили порт, то при подключении в клиенте тоже нужно указать новый порт, так как по умолчанию будет использоваться 22, например:

ssh -p 2222 localhost

К тому же, если на компьютере установлен и настроен брандмауэр, то в нем тоже нужно разрешить доступ к новому порту ssh, для этого выполните:

sudo ufw allow 2222

Даже если служба ssh находится на порту по умолчанию, его тоже нужно открыть в брандмауэре если вы собираетесь подключаться к компьютеру через интернет:

sudo ufw allow 22

Настройка ssh Ubuntu 20.04 полностью завершена.

Выводы

Теперь, когда установка SSH в Ubuntu 20.04 завершена, вы можете получить удаленный доступ к своему компьютеру через интернет и быть уверенными что он находится в безопасности. Если у вас остались вопросы, спрашивайте в комментариях.

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

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

Удивлённо поднимем брови, умиляясь тому, как гибка наша любимая операционка, засучим рукава и приступим к делу.

В основе данного метода лежит идея о том, что мы можем использовать SWAP-раздел для установки временной операционной системы, а когда она встанет на ноги — заняться основной. Главное и единственное, что нам нужно — это своп размером не менее 420 Мб (именно столько занимает lenny со всем необходимым).

В статье используются следующие допущения:

  1. у вас стоит дебиан, и ставить вы планируете дебиан;
  2. используется grub установленный в MBR.

Краткий план работ

  1. превращаем swap-раздел в ext3;
  2. устанавливаем на него чистую ОС;
  3. перезагружаемся в нее;
  4. делаем нужные изменения на основном разделе;
  5. копируем чистую ОС из временного в основной раздел;
  6. загружаемся с основного раздела, включаем swap.

Подготовка раздела

Отключение раздела подкачки

Первое, что мы сделаем — убедимся, есть ли у нас этот своп-раздел вообще:

Как видим — есть, и размер (отображается в Мб) вполне удовлетворяет требованиям. Осталось выяснить, как у нас разбит диск:

Видно, что на sda1 — текущая ОС, на sda5 — своп. Запутаться сложно, но всякое бывает.

Убедиться, что мы его выключили, можно выполнив всё тот же free :

Подготовка временного раздела

Обновим нашу таблицу разделов:

Нам заботливо сообщили, что ядро не увидит изменений до перезагрузки, но нам это пока и не нужно. Теперь самое время подготовить файловую систему на нашем старом новом разделе. Например, ext3:

Примонтируем раздел куда-нибудь и на этом его подготовка будет закончена.

Установка «временной» ОС.

Здесь нужно заметить, что временной она является только по своему местоположению. Чтобы дважды не прогонять все действия по сборке чистой системы в дальнейшем мы просто скопируем её на основной раздел.

Использование debootstrap

Используем отличное средство для получения минимальной установки — debootstrap . Здесь и далее мы будем считать что проблем с интернетом на сервере нет (иначе какой же он после этого сервер ?), поэтому выкачиваем всё из репозитория.

После нажатия enter начнется процесс загрузки и установки пакетов, при достаточно среднем интернет-соединении (

Конфигурирование новой системы

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

Сначала скопируем все важные настройки. Наверное, у каждого найдутся достаточно важные файлы, которые лежат не там где положено. У меня, к примеру, есть некий /etc/rc.routes со всеми нестандартными маршрутами. Главное не забыть ничего. Приводить тут какой-либо список, мне кажется, совершенно бессмысленно, но у меня это выглядит примерно так:

В fstab напишем самое необходимое — proc и наш корневой раздел:

Теперь смонтируем dev-окружение, перейдем в чрут нашей временной системы и сразу примонтируем proc :

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

Настроим часовой пояс:

Также нам понадобятся следующие пакеты:

Сразу же, чтобы не забыть, создадим пользователя и назначим ему пароль, иначе в ssh нас потом не пустят:

Теперь переустановим загрузчик. Сначала необходимо создать все файлы загрузчика на новом диске:

Подготовка загрузчика

После чего необходимо инициализировать МБР на загрузку с нашего нового раздела. Для этого всё там же, в чруте, войдем в консоль граба и напишем следующее:

Своеобразный автокомплит по табу подскажет нам, какие разделы есть в нашем распоряжении. Как видим всё на единицу меньше чем в названии в системе. Инициализируем загрузку с нашего sda5 :

Загрузчик установлен куда нужно. Теперь выберем и установим подходящее ядро:

В ходе установки нас спросят «Create a symbolic link to the current kernel image?», на что мы ответим утвердительно. Так же сообщат, что мы устанавливаем ядро, требующее от загрузчика поддержку initrd, и уточнят, не передумали ли мы.
Отвечаем «Нет» и установка заканчивается. Осталось обновить меню загрузчика:

Выходим из чрута, собираем нервы в кулак и отправляем сервер в первую перезагрузку:

Если все было сделано правильно — машина перезагрузится в нашу временную систему. Мы можем зайти в ssh как пользователь, которого мы только что добавили.

Перенос системы на основной раздел.

Подготовка основного раздела

Форматируем и монтируем наш старый раздел:

К слову, на этом этапе можно провести и обслуживание диска: например переразбить основной раздел и проверить файловую систему.

Копирование системы

Остается скопировать нашу чистую ОС на основной раздел:

Обновляем fstab. На этот раз причешем его по всем правилам:

Подготовка загрузчика

В очередной раз нужно обновить граб. На этот раз — для загрузки уже с нашего основного раздела:

Тут стоит отметить, что у меня в этом месте, в отличие от первого случая, menu.lst обновляться отказался, и там по-прежнему оставались ссылки на sda5. Почему это происходит — я так и не разобрался, поэтому вручную подредактировал этот файл:

Выходим из чрута и делаем вторую перезагрузку:

После перезагрузки можно убедиться, что мы снова на родном основном разделе:

Включение раздела подкачки

Остается создать и включить своп:

Убедимся что всё нормально:

Ну и в конце, если вы редактировали /boot/grub/menu.lst врукопашную — стоит все-таки запустить скрипт его обновления еще раз:

Подводя итоги.

Данный способ безусловно не самый простой путь переустановки системы, однако, во многих случаях, он становится единственно возможным. Тем более вся процедура занимает около 25 минут, поэтому если ваш ДЦ не через дорогу, то в любом случае выходит совсем неплохая экономия времени. Получилось на удивление много букв — я пытался расписать подробно и понятно, но на самом деле операция простая и достаточно быстрая.

Удаленная переустановка Linux по ssh без доступа к консоли

2017-02-13 в 10:11, admin , рубрики: linux, администрирование, Настройка Linux, Серверное администрирование

Понадобилось мне переустановить сервер, который как бы хостился у знакомых знакомых. Там был сильно устаревший Debian, а, самое главное, система стояла на обычных разделах без lvm и пространство было распределено очень не оптимально. Физический доступ получить к нему было практически нереально, местного админа попросить что-то сделать было можно, но занять это могло неделю. Виртуальный KVM у сервера был, но извне на него попасть было нельзя; у как бы хостера не было лишних IP-адресов, а внутрь его сети попасть было невозможно. Надо было переустановить сервер из-под работающей системы по ssh. Ага, давайте поменяем ротор у турбины не выключая, потом её перезапустим и будет она с новым ротором работать!

Первой идеей было создать chroot окружение на ram-диске и с него создать lvm и залить систему. Но не тут-то было, не дает система изменить таблицу разделов.

Второй идеей было взять исходники дистрибутива Debian, зашить в них IP-адрес сервера, пересобрать initrd с установщиком Debian, ssh сервером и моими IP, подставить этот initrd в конфиг grub блоком по умолчанию и перегрузиться. После этого я должен был получить ssh консоль с сетевым установщиком. На стенде у меня получилось! Но на бою все окончилось неудачей, сервер не поднялся. Хозяевам сервер оказался не очень нужен, и дело так и заглохло, но у меня осталось ощущение нерешенной задачи.

Как-то с коллегами обсуждали всякие деструктивные действия с системой (типа rm -rf /) и один из коллег сказал, что можно отключить scsi диск, на котором находится корневой раздел и система не пикнет. Это дало мне идею номер три, взять идею один, оторвать диск, вернуть диск и возвращенный диск будет уже другим, не тем который система не отдавала. Именно так и оказалось. А теперь по пунктам, как же все-таки переустановить систему без доступа к физической консоли.

Предупреждение! Надо понимать, что все, что мы будем делать — дорога в один конец, при ошибке мы теряем доступ к системе! Вполне возможно, что придется ехать 1500 километров и лезть в шахту, чтобы реанимировать сервер.

Будем считать, что IP нашей системы 192.168.56.102. Именно так было у меня на стенде. Плюс доступ к интернету через прокси:

Начинаем работу на исходной системе.

Заходим по ssh на сервер:

Создаем каталог и файловую систему для «Системы убийцы», монтируем её:

Ставим отличную утилиту debootstrap, которая разворачивает минимальную установку Debian, при помощи неё мы создадим chroot окружение:

Существуют анологичные утилиты для Федоры и Centos, соответственно febootstrap и yumbootstrap, но я с ними не работал.

Первый аргумент — версия, второй — каталог установки, третий — репозиторий.

Бекапим самое необходимое:

Самое важное — настройки сетевых интерфейсов, без них не получится попасть в переустановленную систему.

Даем имя chroot-окружению:

Слово «Killer_system» будет показываться в приглашении bash. Это важная штука, без неё будет не понятно, где мы в данный момент находимся.

Переходим в новое окружение.

Монтируем полезные fs:

Еще раз ставим debootstrap:

Дальше мои заморочки: у дебиановского пакета openssh-server в рекомендованных пакетах есть пакет xauth, а у него в зависимостях всякие иксовые библиотеки. Я, как сторонник минимализма, не хочу, чтобы на сервере, где не было и не будет графики, ставились огрызки иксов. Поэтому ставим с ключиком --no-install-recommends:

Правим конфиги. Ставим альтернативный порт для ssh демона, чтобы мы могли зайти на chroot систему по ssh:

И разрешаем доступ для root:

Можно не давать доступ root, а создать пользователя и дать ему sudo права, но тут я сознательно упрощаю.

Дальше надо задать пароль root, так как по умолчанию debootstrap не устанавливает никакие пароли:

Заходим в chroot окружение по ssh:

Это мы делаем для того, чтобы полностью отвязаться от старой системы, у которой мы оторвем диски. А так у нас будет полностью автономная система в оперативной памяти, никак не связанная со старой.

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

Или случайными данными в несколько проходов, если хотим хорошо. Достоинство метода в том, что мы можем дождаться окончания работы dd и, при необходимости, повторить. Если же затирать диски непосредственно из боевой системы, то посмотреть на результаты работы dd мы уже не сможем.

Попробуем простой путь, удалим тома и разделы:

Но неудача. При этом раздел удалится, и система сломается, но воспользоваться простым путем без перезагрузки не получится. А перегружаться будет некуда.

Мы пойдем другим путем. Проверяем, где у нас что находится:

Будем считать, что корневой раздел у нас на диске sda.

Затираем диск, чтобы ни в коем случае его не подцепил lvm.

Предупреждение! После этого момента возврата нет, даже следующий шаг не такой вредоносный. Задумаемся на минуту, проверим консоль, за которой сидим и оправдаем имя нашего chroot'а:

Проверяем, диск оторвался:

Подключаем диск обратно:

Проверяем, что вернулось:

Был sda, стал sdb, отлично.

Важный момент: на згрузочном диске необходимо создать один первичный раздел размером на весь диск и этот раздел отдать lvm'у для того чтобы на него смог встать grub. Все остальные диски можно отдавать lvm'у целиком не создавая систему разделов (pvcreate /dev/sdc). Создаем таблицу разделов и один первичный раздел типа 8e, Linux LVM:

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

Разворачиваем уже боевую систему на новое место на жестком диске:

Возвращаем на место резервные копии конфигов:

Теперь нас ждет новая система:

Обратите внимание, в приглашении командной строки теперь имя нового chroot окружения.

Монтируем файловые системы:

Ещё можно примонтровать эти файловые системы из родительского chroot'а:

Устанавливаем и конфигурируем openssh:

Устанавливаем пакеты, без которых не обойтись:

Да, я не могу жить без vim и ненавижу nano:

В принципе grub прописывается куда надо ещё при установке, но, всё же, для поддержки штанов и морального духа повторим:

Теперь правим конфиги, вначале самый важный, без которого система не поднимется:

В файле interfaces все должно быть в порядке, ведь как-то сеть у нас работала?

В конфиг apt'а добавляем информацию о прокси:

Добавляем строчку в /etc/hosts:

Размонтируем файловые системы:

И выходим из chroot'а:

Размонтируем файловые системы:

Если размонтировать /dev не удалось, то не удастся размонтировать и /target, но это не страшно.

Если удалось, то делаем так:

Если нет, то так:

Эти команды сбросят дисковые кеши и перемонтируют корневую файловую систему в read only. После этого можно перегружаться.

Тут-то нас ждет сюрприз от всеми любимого systemd! Он знает, что мы в chroot и не дает перегрузиться! Google дает советы выйти из chroot, но нам-то выходить некуда. Но на помощь приходит Magic SysRq!

Активируем SysRq (он, скорее всего, активирован, но нам же надо убедиться?).

Барабанная дробь, тревожное ожидание, неужели мы что-то забыли, и сервер не поднялся?

Ура! Мы в новой системе!

Пересоздадим initrd. Это не обязательно, но в дальнейшем избавит от некоторых ошибок при перезагрузке:

Мне нужно удаленно установить Ubuntu Server 10.04 (x86) на сервер, на котором в данный момент работает RHEL 3.4 (x86). Я должен быть очень осторожным, потому что никто не может нажать кнопку перезагрузки для меня, если что-то пойдет не так.

Вы когда-нибудь устанавливали удаленно Linux? Какой способ вы бы порекомендовали? Какой-нибудь совет для вещей, чтобы остерегаться?

Обновить:

Спасибо за вашу помощь. Мне удалось «поменять резину за рулем» !

Вот схема того, что я сделал:

  1. Запустите debootstrap на существующем сервере Ubuntu
  2. Перенесите файлы в раздел подкачки сервера RHEL 3.4
  3. Загрузитесь в раздел подкачки (система debootstrap)
  4. Перенесите файлы в исходный корневой раздел
  5. Загрузитесь в новую систему Ubuntu и завершите установку с помощью tasksel, apt-get и т. Д.

Я проверил метод в виртуальной машине, а затем применил к серверу. Мне повезло, что все прошло гладко :)

Похоже, что вы пытаетесь установить новые шины на ваш автомобиль во время вождения. Теоретически возможно. Похоже, как говорит Орблинг, меняя шины во время вождения автомобиля. Не очень просто! @ephemient Отлично. Вы видите, что это возможно, просто невероятно сложно. Возможно, если вы дадите более подробную информацию об ограничениях ситуации, чрезвычайно умные, творческие и находчивые люди из Server Fault могут дать вам некоторые другие альтернативы или советы, которые могут позволить более реалистичный путь к достижению ваших целей.

Я думаю, что самая большая проблема, с которой вы можете столкнуться - это возраст ядра и libc в существующей системе. Это ядро ​​серии 2.4.x? Если это так, я не уверен, что вы сможете это осуществить, потому что в какой-то момент во время установки вам нужно будет запустить инструменты, которые были скомпилированы для запуска в ядре Ubuntu и libc, и они могут работать неправильно (или вообще) в более старой среде выполнения. Если вы не используете ядро ​​серии 2.6.x на удаленном сервере, я не думаю, что у вас есть большие шансы на успех.

Если вы все еще думаете, что можете попробовать это, есть несколько руководств, которые мне известны:

Установка Debian GNU / Linux из системы Unix / Linux , из Руководства по установке Debian GNU / Linux. Опять же, специфичный для Debian, но в основном применимый.

Оба эти руководства довольно старые, поэтому ни одно из них не может рассматриваться как что-либо, даже близкое к руководству «вырезать и вставить». Я настоятельно рекомендую последовать совету других здесь и сделать несколько пробных запусков на локальном сервере или виртуальной машине, потому что есть определенные недостатки и ошибки, которые вам необходимо решить, прежде чем идти вперед по-настоящему.

Читайте также: