SSH означает «Secure Shell» и представляет собой зашифрованный протокол, используемый для входа в систему и управления удаленным сервером. SSH также поддерживает различные механизмы аутентификации. SSH использует аутентификацию на основе пароля и аутентификацию на основе открытого ключа для безопасного соединения между клиентом и сервером. Аутентификация на основе ключей SSH более безопасна, чем аутентификация на основе пароля, потому что ключи очень сложно угадать или взломать с использованием доступной в настоящее время вычислительной мощности.
В этом руководстве мы покажем вам, как настроить SSH аутентификация на основе ключей на сервере Ubuntu 18.04.
- Предварительные требования
- Шаг 1. Создайте облачный сервер Atlantic.Net
- Шаг 2. Создайте ключ SSH на клиентском компьютере
- Шаг 3. Скопируйте открытый ключ на сервер Ubuntu
- Шаг 4 — Отключите аутентификацию по паролю SSH
- Шаг 5. Войдите на сервер с помощью ключей SSH
- Заключение
- Как добавить SSH-ключи в Author_keys?
Предварительные требования
- Два свежих Ubuntu 18.04 VPS на облачной платформе Atlantic.Net
- Корневые пароли, настроенные на обоих серверах.
Шаг 1. Создайте облачный сервер Atlantic.Net
Сначала войдите в ваш облачный сервер Atlantic.Net. Создайте новый сервер, выбрав Ubuntu 18.04 в качестве операционной системы с как минимум 2 ГБ ОЗУ. Подключитесь к своему облачному серверу через SSH и войдите в систему, используя учетные данные, выделенные вверху страницы.
После входа на сервер Ubuntu 18.04 выполните следующую команду, чтобы обновить базовую систему с помощью последние доступные пакеты.
apt-get update -yapt-get upgrade -y
Шаг 2. Создайте ключ SSH на клиентском компьютере
Сначала войдите на свой клиентский компьютер и сгенерируйте новую пару ключей SSH, выполнив следующую команду:
ssh-keygen -t rsa
Вы необходимо будет нажать Enter , чтобы принять расположение файла по умолчанию и ввести кодовую фразу для добавления дополнительного уровня безопасности, как показано ниже:
Создание общедоступного/частного rsa пара ключей. Введите файл, в котором будет сохранен ключ (/root/.ssh/id_rsa): Введите кодовую фразу (пусто, если кодовая фраза отсутствует): Введите ту же парольную фразу еще раз: Ваш идентификатор был сохранен в/root/.ssh/id_rsa. открытый ключ был сохранен в/root/.ssh/id_rsa.pub. Отпечаток ключа: cd: 58: c4: 35: 60: 6 f: a4: 2e: f0: b7: 42: c5: 20: 78: 86: b2 [электронная почта защищена] Случайное изображение ключа: + - [RSA 2048] ---- + | о. .. + o + || . о о. =. +. || о о. = o || E o B. || S = || . о. || . . || . || | + ----------------- +
Вышеупомянутая команда сгенерирует 2048-битную пару ключей RSA с безопасной парольной фразой для предотвращения несанкционированного доступа вход в систему.
Вы можете увидеть сгенерированные открытый и закрытый ключи с помощью следующей команды:
ls -l .ssh/id_rsa *
Вы должны увидеть следующий результат:
-rw ------- 1 root root 1766 1 ноября 11:03 .ssh/id_rsa-rw-r - r-- 1 root root 401 1 ноября 11:03 .ssh/id_rsa.pub
На этом этапе у вас есть открытый и закрытый ключи, которые вы можете использовать для аутентификации на своем сервере Ubuntu.
Шаг 3. Скопируйте открытый ключ на сервер Ubuntu
Затем вам нужно будет скопировать открытый ключ с клиентского компьютера на ваш сервер Ubuntu 18.04.. Вы можете скопировать открытый ключ с помощью утилиты ssh-copy-id, как показано ниже:
ssh-copy-id [email protected]
Вы должны увидеть следующий результат :
Не удалось установить подлинность хоста 192.168.0.102 (192.168.0.102). Отпечаток ключа ECDSA - f7: 9c: 72: 63: 33: ac: d6: 49: 26: 9c: af: c6: ff: 11: 27: 01. Вы уверены, что хотите продолжить подключение (да/нет)? yes
Введите « yes » и нажмите ENTER , чтобы продолжить. Вы должны увидеть следующий результат:
/usr/bin/ssh-copy-id: INFO: попытка входа в систему с новым ключом (ключами), чтобы отфильтровать все, что уже установлено/ usr/bin/ssh-copy-id: ИНФОРМАЦИЯ: осталось установить 1 ключ (и) - если теперь появится запрос, это установка нового ключа [защищенного по электронной почте] пароля:
Далее вам будет предложено ввести удаленное имя пользователя и пароль. После успешной аутентификации содержимое открытого ключа ~/.ssh/id_rsa.pub будет добавлено к файлу удаленного пользователя ~/.ssh/authorized_keys, как показано ниже:
Номер ключа ( s) добавлено: 1Теперь попробуйте войти в систему с помощью: "ssh '[email protected]'" и убедитесь, что были добавлены только те ключи, которые вам нужны.
Шаг 4 — Отключите аутентификацию по паролю SSH
Затем войдите в систему на своем сервере Ubuntu 18.04 и отключите аутентификацию на основе пароля SSH, чтобы добавить дополнительный уровень безопасности на ваш сервер.
Вы можете отключить аутентификацию на основе пароля, отредактировав файл/etc/ssh/sshd_config:
nano/etc/ssh/sshd_config
Найдите следующие строки и измените значение «нет»:
PasswordAuthentication noChallengeResponseAuthentication noUsePAM no
Сохраните и закройте файл, затем перезапустите службу SSH, чтобы применить конфигурацию:
systemctl restart ssh
Шаг 5. Войдите на сервер с помощью ключей SSH
На этом этапе настроена аутентификация на основе ключей SSH. Теперь пришло время войти в систему на сервере Ubuntu 18.04 с открытым ключом.
Вы можете войти на свой сервер Ubuntu 18.04, просто выполнив следующую команду:
ssh [email protected]
Если вы входите в систему в первый раз, вам будет предложено, как показано ниже:
Подлинность хоста 192.168.0.102 ( 192.168.0.102) 'не может быть установлен. Отпечаток ключа ECDSA - f7: 9c: 72: 63: 33: ac: d6: 49: 26: 9c: af: c6: ff: 11: 27: 01. вы хотите продолжить подключение (да/нет)? yes
Введите Yes и нажмите Enter , чтобы продолжить. Затем вам будет предложено ввести кодовую фразу для вашего закрытого ключа, как показано ниже:
Введите кодовую фразу для ключа '/root/.ssh/id_rsa':
Введите кодовую фразу для закрытого ключа и нажмите Enter , чтобы войти на свой сервер.
Заключение
В приведенном выше руководстве мы узнали как настроить аутентификацию на основе ключа SSH с парольной фразой в Ubuntu 18.04. Соединение между вашим клиентским компьютером и сервером Ubuntu 18.04 теперь очень безопасно. Вы также можете использовать тот же ключ для другого удаленного сервера. Если вы готовы начать работу с аутентификацией на основе ключей SSH, попробуйте VPS-хостинг с Atlantic.Net сегодня.
Как добавить SSH-ключи в Author_keys?
У меня есть сервер Ubuntu на Amazon EC2, который я использую для разработки, и сегодня я тупо удалил все из своего ~/.ssh/authorized_keys
файл. К счастью, у меня открыт SSH, поэтому я все еще подключен и могу исправить файл, но когда я пытаюсь вернуть свой ключевой файл, это не работает. Я все еще получаю отказ в разрешении с сервера на моем локальном компьютере.
authorized_keys
имеет разрешения 600. Я попытался добавить свой SSH-ключ с помощью ssh-rsa и оставить ssh-rsa выключенным. Я также попытался сделать ключ SSH одной строкой, но это тоже не сработало.
Есть ли что-то еще, что мне нужно сделать, например, как-то перезагрузить файл?
Вы не должны никогда сохранять файл с его содержимым, начинающимся с ----- НАЧАТЬ RSA PRIVATE KEY -----
на сервере, это ваш закрытый ключ. Вместо этого вы должны поместить открытый ключ в файл ~/.ssh/authorized_keys
.
Этот открытый ключ имеет расширение .pub
при создании с использованием ssh-keygen
, а его содержимое начинается с ssh-rsa AAAAB3
. (Бинарный формат описан в ответах на этот вопрос).
Разрешения ~/.ssh
на сервере должны быть 700. Файл ~/.ssh/authorized_keys
(на сервере) должен иметь режим 600. Разрешения (закрытого) ключа на стороне клиента должны быть 600.
Если закрытый ключ не был защищен паролем, и вы поместили его на сервер, я рекомендую вам сгенерировать новый:
ssh-keygen -t rsa
Вы можете пропустить это, если полностью уверены, что никто не сможет восстановить удаленный закрытый ключ с сервера.
Если это не поможет , запустите ssh
с параметрами для большей детализации:
ssh -vvv user@example.com
На стороне сервера вы можете просмотреть /var/log/auth.log
для получения подробной информации.
Альтернативный способ i nустановите свой открытый ключ в authorized_keys
удаленной машины:
cat ~/.ssh/id_rsa.pub | ssh USER @ HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Некоторые преимущества:
-
не требует установки
ssh-copy-id
. -
гарантирует, что
mkdir
работает перед попыткой добавленияid_rsa.pub
вauthorized_keys
.
-
12Ваш ответ помог мне сделать это на нескольких удаленных машинах без каких-либо дополнительных пакетов, спасибо. — nol 07 марта 2014, в 10:06
-
Это не гарантирует, что каталог «~/.ssh» и файл «~/.ssh/authorized_keys» будут созданы с правильными разрешениями. — Ник 04 июня ’14 в 17:55
-
1@ Ник, у меня была такая проблема. Так что, возможно, нужно сначала проверить их существование, если отсутствует, правильно создать с помощью chmod (700/папка, 600/файл), и только затем добавить? так, может быть, это не может быть однострочник? — AnneTheAgile, 7 августа 2014 г., в 3:52
-
7@AnneTheAgile Я думаю, изменить часть
mkdir -p ~/.ssh
в ответе @MariusButuc наumask 077 && mkdir -p ~/.ssh
— это все, что вам нужно сделать, чтобы убедиться, что он будет работать правильно. — Ник 07 авг., 14:02 -
1ты @ Ник! Я попробую. — AnneTheAgile 07 авг., 2014, 21:02
Альтернативный способ установки вашего открытого ключа в authorized_keys
удаленного компьютера:
cat ~/.ssh/id_rsa.pub | ssh USER @ HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Некоторые преимущества:
-
не требует установки
ssh-copy-id
. -
гарантирует, что
mkdir
работает перед попыткой добавленияid_rsa.pub
вauthorized_keys
.
Если у вас есть аутентификация на основе входа в систему, используйте ssh-copy-id
, чтобы добавить ваши открытые ключи на удаленный сервер.
ssh-copy-id user @ host
-
1Похоже, это недопустимая команда для Mac, а это моя клиентская машина. — Дэйв Лонг 01 июня ’11 в 17:05
-
1Может быть полезно phildawson.tumblr.com/post/484798267/ssh-copy-id-in-mac-os-x — Шоаиб Наваз, 1 июня 2011 г., 17:23
-
14в OSX, которую вы можете установить с помощью brew:
brew install ssh-copy-id
— Фил, 21 ноября 2013 г., 0:26 -
На Macports эту команду можно установить с помощью
sudo port install openssh + ssh_copy_id
.+ ssh_copy_id
устанавливает openssh с вариантом ssh_copy_id. — Стефан Ласевски 18 сен 2014, в 22:23 -
7Обратите внимание, что инструкции на phildawson.tumblr.com требуют, чтобы вы устанавливали ненадежное программное обеспечение как root. Это довольно опасный и хороший способ получить взлом, если вы не уверены, что можете доверять автору. — Стефан Ласевски 18 сен. ’14 в 22:24
Если у вас есть аутентификация на основе входа в систему, используйте ssh-copy-id
, чтобы добавить свои открытые ключи в удаленный сервер.
ssh-copy-id user @ host
local> scp .ssh/id_dsa.pub remote.com:local> ssh remote.comremote> cat id_dsa. pub >> .ssh/authorized_keysremote> rm id_dsa.pubremote> exit
local> scp .ssh/id_dsa.pub remote.com:local> ssh remote.comremote> cat id_dsa. pub >> .ssh/authorized_keysremote> rm id_dsa. pubremote> exit
Самый простой способ — скопировать и вставить …
Сначала просмотрите/скопируйте содержимое вашего локального открытого ключа id_rsa.pub
, включая начало «ssh-rsa» пока он не закончится вашим адресом электронной почты:
cat ~/.ssh/id_rsa.pub
Затем отредактируйте authorized_keys
на сервере и вставьте содержимое буфера обмена под любыми другими ключами в этом файле:
nano ~/.ssh/authorized_keys
И сохраните Ctl + O
, выйдите из файла Ctl + X
, выйдите из сеанса SSH exit
и попробуйте снова войти в систему, чтобы убедиться, что все работает. Если он не запрашивал пароль, он работал.
-
Это далеко не самый простой способ, и он требует ошибок, которые могут повредить файл. цепочка ключа в файл authorized_keys НАМНОГО безопаснее. — RichieHH, 30 ноя., 20:14
-
Я не согласен. Потребуется большой талант, чтобы неправильно набрать слово «кошка» и выделить строки, которые явно не были частью файла. — ow3n 30 ноя. ’20 в 13:20
Самый простой способ — скопировать и вставить …
Сначала просмотрите/скопируйте содержимое вашего локального открытый ключ id_rsa.pub
, включая начало «ssh-rsa», пока он не закончится вашим адресом электронной почты:
cat ~/.ssh/ id_rsa.pub
Затем отредактируйте authorized_keys
на сервере и вставьте содержимое буфера обмена под любыми другими ключами в этом файле:
nano ~/.ssh/authorized_keys
И сохраните Ctl + O
, выйдите из файла Ctl + X
, выйдите из сеанса SSH exit
и попробуйте снова войти в систему, чтобы убедиться, что все работает. Если он не запрашивал пароль, он работал.
Получите оболочку на удаленном компьютере, куда вы хотите поместить ключ, а затем вы можете запустить эту однострочную программу для создания необходимых файлов и каталогов, установить их разрешения и добавить ключ в файл. Конечно, вам нужно изменить часть KEYGOESHERE
ниже и комментарий после нее.
mkdir -p ~/.ssh && chmod 700 ~ /.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/. ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user @ remotehost or note" >> ~/.ssh/authorized_keys


Получите оболочку на удаленном компьютере, куда вы хотите поместить ключ, а затем вы можете запустить этот однострочный файл для создания необходимых файлов и каталоги, установите их разрешения и добавьте ключ в файл. Конечно, вам нужно изменить часть KEYGOESHERE
ниже и комментарий после нее.
mkdir -p ~/.ssh && chmod 700 ~ /.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user @ remotehost or note" >> ~/.ssh/authorized_keys
Я думал, что могу внести свой вклад в это, поскольку речь идет об AWS в частности, и во всех ответах проблема рассматривается только как проблема Linux, как если бы это была часть оборудования. Первое, что вам нужно понять, это то, что вы никогда и никогда не должны рассматривать экземпляры EC2 как оборудование. Это просто создаст вам больше работы. Относитесь к ним как к изменчивым. Это самое большое препятствие, с которым сталкиваются люди с AWS. Создайте AMI своего экземпляра и вставьте нужный вам ключ в новый экземпляр. Cloud-init позаботится об этом за вас. Более подробно все, что вам нужно сделать, это использовать правильный открытый ключ при создании нового экземпляра из AMI оригинала. Если, как в комментариях к утвержденному ответу, вы хотите для создания собственной пары ключей из файлов pub и pem AWS предоставляет вам возможность загружать открытые ключи для использования в EC2.
http://docs.aws.amazon.com/AWSEC2/ последняя версия/UserGuide/пары ключей ec2. html # как-генерировать-свой-ключ-и-импортировать-в-aws
Я думал, что могу внести свой вклад в это, поскольку речь идет именно об экземплярах AWS, и все ответы рассматривают проблему только как проблему Linux, поскольку если бы это было аппаратное обеспечение. Первое, что вам нужно понять, это то, что вы никогда и никогда не должны рассматривать экземпляры EC2 как оборудование. Это просто создаст вам больше работы. Относитесь к ним как к изменчивым. Это самое большое препятствие, с которым сталкиваются люди с AWS. Создайте AMI своего экземпляра и вставьте нужный вам ключ в новый экземпляр. Cloud-init позаботится об этом за вас. Более подробно все, что вам нужно сделать, это использовать правильный открытый ключ при создании нового экземпляра из AMI оригинала. Если, как в комментариях к утвержденному ответу, вы хотите для создания собственной пары ключей из файлов pub и pem AWS предоставляет вам возможность загружать открытые ключи для использования в EC2.
http://docs.aws.amazon.com/AWSEC2/ latest/UserGuide/ec2-key-pair.html # how-to-generate-your-own-key-and-import-it-to-aws
После сохранения открытого ключа вы должны сохранить закрытый ключ в каталог и файл на вашем компьютере. И в разделе auth ssh on putty вы должны указать файл закрытого ключа, который вы сохранили на своем рабочем столе. Это сработает. У меня работает.
-
1Мне бы очень понравилось, если бы консоль Windows могла иметь все функции ssh, добавленные в ее интерпретатор — Деннис 9 ноя 2014, в 1:46
После сохранения открытого ключа вы должны сохранить закрытый ключ в каталог и файл на вашем компьютере. И в разделе auth ssh on putty вы должны указать файл закрытого ключа, который вы сохранили на своем рабочем столе. Это сработает. Меня устраивает.
Вот вариант, в котором у вас может быть список имен файлов с открытым ключом в текстовом файле и большой пакет файлов с открытым ключом также находятся в одном каталоге.
Этот вариант может быть полезен, если вы давали огромный список файлов с открытым ключом для импорта 🙂
$ for i in $ (cat ListOfPubKeyFiles.txt); делать кот $ я | Пользователь ssh @ Имя хоста "cat >> ~/.ssh/authorized_keys"; готово

Вот вариант, при котором у вас может быть список имен файлов с открытым ключом в текстовом файле, и большая партия файлов с открытым ключом также находится в в том же каталоге.
Этот вариант может быть полезен, если вы предоставляете огромный список файлов открытых ключей для импорта 🙂
$ for я в $ (cat ListOfPubKeyFiles.txt); делать кот $ я | Пользователь ssh @ Имя хоста "cat >> ~/.ssh/authorized_keys"; готово