Как восстановить ssh ubuntu

Обновлено: 03.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:

Если при создании Linux-инстанса в AWS не была создана пара ключей (KeyPair) для доступа к нему через SSH либо они утеряны, то необходимо совершить ряд операций для получения доступа к машине. К уже запущенному инстансу добавить ключи через консоль AWS невозможно. Существует три способа, с помощью которых мы сможем восстановить доступ по SSH к инстансу.

Самый простой способ — настройка ключа с использованием механизма cloud-init (спасибо за подсказку yusman). Но он не работает если права на директорию /home повреждены или дистрибутив не поддерживает директивы cloud-init.

Второй способ — создание образа (Amazon Machine Image) с существующего инстанса и последующий запуск нового инстанса на его основе, но с созданием ключа. Таким образом фактически будет клонирована существующая машина с той лишь разницей, что на последнем этапе возможно создать новые ключи. Создание образа может занять длительное время для инстанса с дисками большого объема, и вам придется настраивать все сервисы, завязанные на эту машину заново. Поэтому данный способ в большинстве случаев займет больше времени.

В официальной документации от Amazon описывается и другой способ. Он позволяет восстановить доступ и свести к минимуму издержки на перенастройку сервисов (по сравнению со вторым способом), которые завязаны на инстанс, к которому потерян доступ. В статье дается его пошаговое описание.

Внимание! Этот способ работает только для инстансов, в которых в качестве корневого устройства используется блочное хранилище (Amazon Elastic Block Store), и не работает для локального хранилища инстансов (Amazon EC2 Instance Store).

Чтобы узнать, какой тип корневого устройства используется у вас, откройте Amazon EC2 консоль, перейдите в Instances, выберите инстанс и проверьте значение параметра Root device type в панели с детальной информацией.

Тип корневого устройства инстанса

Шаг 1. Подготовка

Для начала необходимо сохранить некоторую информацию, чтобы не пришлось отвлекаться и не переходить на другие экраны (тем более это будет очень неудобно). Все данные можно найти в детальной информации инстанса (как туда попасть вы уже знаете). Запишите следующие настройки:

  • Instance ID
  • AMI ID
  • EBS ID
  • Root device
  • Availability zone

Для EC2-classic: eсли для инстанса создан эластичный IP-адрес (Elastic IP), то необходимо сохранить и его значение.

Настройки инстанса, которые необходимо сохранить

Изображение кликабельно

Для получения идентификатора блочного хранилища (EBS ID) необходимо кликнуть по названию Root device.

EBS ID

Шаг 2. Создание временного инстанса

Следующий этап — создание инстанса, с помощью которого вы будете восстанавливать ключи на оригинальном инстансе. Можно пропустить этот шаг, если у вас есть другой запущенный инстанс, находящийся в той же зоне (Availability zone), что и восстанавливаемый, и при этом он создан с использованием такого же AMI или версия операционной системы на нем позволит подключить диск с оригинального инстанса и скопировать на него ключи SSH. Если такого инстанса нет, то выполните следующие действия:

  • Перейдите в консоль EC2 (на дашборд или в меню Instances) и нажмите Launch Instance
  • На странице выбора AMI (Choose an Amazon Machine Image) выберите такой, который использовался для создания оригинального инстанса (его вы записывали на первом шаге — AMI ID). Если по какой-то причине этот AMI недоступен, можно создать образ с оригинального инстанса и использовать его либо выбрать такой тип AMI, к которому бы можно было подключить корневой диск восстанавливаемого инстанса
  • На странице выбора типа инстанса (Choose an Instance Type) выберите самый дешевый из доступных типов
  • На странице с детальной информацией (Configure Instance Details) укажите такую же зону (Availability Zone), как в нашем инстансе. Если он запущен в VPC, выберите в пункте Network аналогичную VPC и укажите подсеть (subnet) в данной зоне.

Настройка Availability Zone

Имя на странице Add Tags

Сохранение KeyPair

Шаг 3. Подключение корневого диска с восстанавливаемой машины к временному инстансу

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

    Перейдите в консоль EC2 в раздел Instances и выберите оригинальный инстанс (его можно определить по записанному ранее Instance ID либо по имени, которое отличается от того которое вы указали при создании временного инстанса).

Остановка инстанса

Далее в меню Actions — Instance State — Stop.

Подключение диска

После чего нажимайте Attach. В случае, если оригинальный инстанс создавался через AWS Marketplace AMI и раздел содержит коды AWS Marketplace, вы получите ошибку, в которой говорится о том, что нельзя подключить раздел с кодами к работающему инстансу.

Ошибка при подключении диска с AWS Marketplace кодами

Оба диска подключены к временному инстансу

  • Перейдите в раздел Instances в навигационной панели
  • Выберите временный инстанс
  • Далее в меню Actions — Instance State — Start.

Шаг 4. Подготовка ключей для подключения к инстансу по SSH

Пользователям Linux нет необходимости генерировать какие-то дополнительные ключи. Необходимо лишь дать права на чтение этого файла:

chmod 400 my-keypair.pem

Подготовка ключей, если вы работаете под Windows

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

  • Откройте PuTTYgen (устанавливается вместе с PuTTY)
  • Выберите в параметрах RSA 2048 бит

RSA 2048 бит

Шаг 5. Подключение к временному инстансу по SSH

Подключитесь по 22 порту с использованием ключа. Имя пользователя зависит от того, какой AMI использовался при создании инстанса. Его вы записывали в самом начале. Возможны следующие имена пользователей:

  • Amazon Linux 2 или Amazon Linux AMI — ec2-user
  • Centos AMI — centos
  • Debian AMI — admin или root
  • Fedora AMI — ec2-user или fedora
  • RHEL AMI — ec2-user или root
  • SUSE AMI — ec2-user или root
  • Ubuntu AMI — ubuntu
  • Для остальных, если имена ec2-user и root не работают — обратитесь к поставщику AMI
Инструкция по подключению для пользователей Windows

  • Запустите PuTTY
  • В поле Host Name адрес в формате имя_пользователя@ip-адрес

Настройка PuTTY. Host Name

Успешный вход на сервер

Шаг 6. Копирование ключей с временного инстанса на оригинальный

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

Например, если имя диска /dev/sdf (может отображаться по-разному на вашем инстансе), используйте следующие операции для монтирования тома в /mnt/tempvol :

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

Скопируйте SSH-ключи с временного инстанса на смонтированный раздел.

Внимание! Используйте имя пользователя, которое указано в командной строке. Это необходимо, так как несмотря на то, что вы успешно подключились со стандартным именем пользователя, которое зависит от операционной системы (описано в шаге 5), в AMI из AWS Marketplace оно может быть другим после входа. Например, для AMI WordPress Certified by Bitnami при входе по SSH используется стандартный логин для Ubuntu — ubuntu . Однако имя пользователя после входа в систему — bitnami

Например, если имя пользователя ubuntu , используйте следующую команду для копирования:

]$ cp .ssh/authorized_keys /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys

Если у вас нет прав на редактирование файлов в /mnt/tempvol , то скопируйте файлы с использованием sudo и проверьте права, чтобы удостовериться, что вы сможете зайти на оригинальный инстанс:

    Проверьте права на файл:

]$ sudo ls -l /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
total 4
-rw------- 1 200 500 392 Aug 15 00:06 authorized_keys

]$ sudo ls -l /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys

Если права изменились, восстановите их:

]$ sudo umount /mnt/tempvol

Шаг 7. Запуск инстанса с восстановленным доступом по SSH

    В консоли EC2 выберите диск, который вы подключали к временному, и в меню: Actions — Detach Volume. Дождитесь, пока состояние (state) диска станет available (можете использовать кнопку Refresh для обновления информации).

Подключение диска

Изображение кликабельно

  • Перейдите в раздел Elastic IP на навигационной панели
  • Выберите адрес Elastic IP, который вы записали в самом начале
  • Далее Actions — Associate address
  • Выберите ID оригинального инстанса и нажмите Associate

Шаг 8. Проверка доступа

Подключитесь к инстансу с восстановленным доступом с помощью созданного ключа.

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

Шаг 9. Завершающий этап

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

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

До 15.04:

Он должен быть таким же простым, как (проверено на новой установке с openssh-server)

(я бы рекомендовал stop ] / запустить поверх перезапустить , если вы не пытаетесь перезапустить систему удаленно. Если ssh уже остановлен, перезапуск не запустит , а не это.)

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

Команда для перезапуска службы ssh :

Начиная с Ubuntu 15.04, Canonical больше не поставляет выскочку по умолчанию .
Таким образом, команды start , stop и restart больше не доступны.

Правильный метод перезапуска службы SSH (или любой другой службы) сейчас является одной из двух следующих команд:

Я думаю, что ошибка неизвестного экземпляра вызвана тем, что SSH не запущен.

Чтобы узнать, запущен ли демон SSH, вам следует см. что-то вроде:

В любом случае просто попробуйте любой из этих:
sudo /etc/init.d/ssh start
sudo start ssh

ответ дан Michael Martin-Smucker 27 November 2017 в 06:32

Сначала проверьте, работает ли sshd, используя следующее:

Вы должны увидеть что-то вроде:

Если вы не видите строку для / usr / sbin / sshd -D , тогда sshd либо никогда не запускался, либо аварийно завершился, что потребует f urther, чтобы выяснить причину.

Если вы видите эту строку, выполните следующую команду:

Это должно напечатать идентификатор процесса sshd, поэтому в этом случае вы должны увидеть:

На рабочем столе Ubuntu:

Сначала проверьте статус службы:

enter image description here

должен показать: - Активно: активно (работает) Если она работает, в этом нет необходимости чтобы перезапустить его. Если вы все еще хотите перезапустить его, Ubuntu вызывает службу ssh, а не sshd.

Но если это не рабочий стол Ubuntu, с помощью интерфейса командной строки:

Служба также управляется выскочкой, а не sysvinit. Таким образом, вы найдете его в /etc/init/ssh.conf вместо /etc/init.d/ssh.

Если вы хотите изменить некоторые настройки (например, порт прослушивания и разрешение на вход root), отредактировав файл конфигурации с помощью команды:

На рабочем столе Ubuntu вы можете использовать gedit вместо nano:

enter image description here

Наконец, примените изменения, перезапустив или перезагрузив SSH:

Если описанное выше по-прежнему не работает, введите следующее:

Если все вышеперечисленное не помогло, попробуйте перезапустить систему ubuntu:

Начиная с Ubuntu 15.04, Canonical больше не выгружается по умолчанию. Таким образом, команды start, stop и restart больше недоступны.

Правильный способ перезапуска службы SSH (или любой другой службы) теперь является одной из двух следующих команд:

sudo systemctl restart ssh sudo service ssh restart

Я думаю, что ошибка Неизвестного экземпляра связана с тем, что SSH не работает.

ps ax | grep sshd

Чтобы проверить, работает ли демон SSH или нет, вы должны увидеть что-то вроде:

В любом случае просто попробуйте любой из них: sudo /etc/init.d/ssh start sudo start ssh

ответ дан Michael Martin-Smucker 18 July 2018 в 02:40

Сначала проверьте, работает ли sshd, используя следующее:

ps -ef | grep sshd

Вы должны увидеть что-то вроде:

root 1234 1 0 12:28 ? 00:00:00 /usr/sbin/sshd -D

Если вы не видите строку для /usr/sbin/sshd -D, тогда sshd либо не запускался, либо разбился, что потребует дальнейшего устранения неполадок, чтобы выяснить, почему.

Если вы видите эту строку, выполните следующую команду:

Это должно печатать идентификатор процесса sshd, поэтому в этом случае вы должны увидеть:

$ cat /var/run/sshd.pid 1234

Если содержимое sshd.pid не соответствует идентификатору процесса запущенного экземпляра sshd, тогда что-то перезапустилось это неправильно. Но какие бы детали вы не нашли здесь, вы должны поставить вас на правильный путь. Либо он рушится, либо перезагружается неправильно, либо никогда не запускается в первую очередь.

Pre 15.04:

Это должно быть так же просто, как (проверено на новой установке с openssh-сервером)

sudo stop ssh sudo start ssh

(Я бы рекомендовал stop / start по restart, если вы пытаетесь перезапустить систему удаленно. Если ssh уже остановлен, restart не запустит его.)

Если эти команды не работают, возможно, вы либо испытываете ошибку, либо переделываете слишком далеко от вашей системы, и в этом случае вы, по крайней мере, знаете, в чем проблема.

В Ubuntu Desktop:

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

sudo service ssh status

должно показать: - Active: active (running) Если он работает, нет необходимости перезапускать его. Если вы все еще хотите перезапустить его, Ubuntu вызывает службу ssh, а не sshd.

service ssh restart

Но если его не Ubuntu Desktop, используя CLI:

sudo systemctl restart ssh sudo service ssh restart

Услуга также контролируется выскочкой, а не sysvinit. Таким образом, вы найдете его в /etc/init/ssh.conf вместо /etc/init.d/ssh.

Если вы хотите изменить некоторые настройки (например, порт прослушивания и корневой вход разрешение), отредактировав файл конфигурации с помощью команды:

sudo nano /etc/ssh/sshd_config

На рабочем столе Ubuntu вы можете использовать gedit вместо nano:

Наконец, примените изменения, перезагрузив или перезагрузив SSH:

sudo service ssh restart

Если выше все еще не работает, введите это:

sudo service ssh stop sudo service ssh start

Если все выше не выполнено, попробуйте перезагрузить систему ubuntu:

Команда для перезапуска ssh service:

sudo service ssh restart

Начиная с Ubuntu 15.04, Canonical больше не выгружается по умолчанию. Таким образом, команды start, stop и restart больше недоступны.

Правильный способ перезапуска службы SSH (или любой другой службы) теперь является одной из двух следующих команд:

sudo systemctl restart ssh sudo service ssh restart

Я думаю, что ошибка Неизвестного экземпляра связана с тем, что SSH не работает.

ps ax | grep sshd

Чтобы проверить, работает ли демон SSH или нет, вы должны увидеть что-то вроде:

В любом случае просто попробуйте любой из них: sudo /etc/init.d/ssh start sudo start ssh

ответ дан Michael Martin-Smucker 24 July 2018 в 17:37

Сначала проверьте, работает ли sshd, используя следующее:

ps -ef | grep sshd

Вы должны увидеть что-то вроде:

root 1234 1 0 12:28 ? 00:00:00 /usr/sbin/sshd -D

Если вы не видите строку для /usr/sbin/sshd -D, тогда sshd либо не запускался, либо разбился, что потребует дальнейшего устранения неполадок, чтобы выяснить, почему.

Если вы видите эту строку, выполните следующую команду:

Это должно печатать идентификатор процесса sshd, поэтому в этом случае вы должны увидеть:

$ cat /var/run/sshd.pid 1234

Если содержимое sshd.pid не соответствует идентификатору процесса запущенного экземпляра sshd, тогда что-то перезапустилось это неправильно. Но какие бы детали вы не нашли здесь, вы должны поставить вас на правильный путь. Либо он рушится, либо перезагружается неправильно, либо никогда не запускается в первую очередь.

до 15.04:

она должна быть максимально простой (проверено на новую установку с openssh-сервер)

sudo stop ssh sudo start ssh

(я бы порекомендовал stop/start за restart, если вы пытаетесь перезапустить систему удаленно. Если SSH уже остановился, нажать [F8] не запустить его.)

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

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