Подключение по SSH
Для реализации задуманного, необходимо уже иметь сервер, к которому мы хотим подключиться. Таким сервером может быть и реально арендованный , для каких-либо своих целей, например для использования его в качестве хостинга своего сайта. Но также сгодится любой хост, на unix подобной операционной системе, в нашей локальной сети, к которому у нас есть доступ пользователя, пара логин и пароль. Для этих целей сгодится созданная нами виртуальная машина, например, с помощью ПО .
Итак допустим мы имеем следующие данные, от созданной нами виртуальной машины:
логин: root
пароль: 12345678
Внимание сейчас идут команды, запускаемые в консоле нашего хоста. Мы будет работать с хоста тоже в OS GNU/Linux, допустим пусть это будет дистрибутив. И давайте настроим доступ с этой машины, чтобы входить на свой сервер по SSH используя только ключи, чтобы не вводить пароль.
Это делать не обязательно, если желаете можно оставить вход по паролю, даже не настраивая ключи, но с точки зрения безопасности, лучше бы проделать всё, то что мы сейчас сделаем.
Сперва открываем терминал в своей системе, которая и будет клиентом. Создаём пару SSH ключей (если их у вас их ещё нет), с помощью команды:
Далее, либо в точности следуем предложенным инструкциям, либо просто нажимаем несколько раз enter, ничего не меняя, и ключи создадутся по умолчанию.
Таким образом, если вы не устанавливали, т.е. не меняли имена, предложенные по умолчанию, то будет создан подкаталог по пути ~/.ssh/ с файлами ключей: публичный ключ в файле id_rsa.pub и приватный ключ в файле id_rsa
если же вы поменяли имя ключа, и назвали его допустим my_key, не указывая пути, то в каталоге, в котором вы сейчас находитесь создадутся два файла с этим именем.
my_key и my_key.pub это соответственно, закрытый и открытый ключи.
И ещё, если вы устанавливали какие-либо значения в поле passphrase for key, т.е. парольная фраза для ключа, то её вам нужно будет помнить, чтобы иметь возможность пользоваться этим ключом в моменты подключения.
Итак создав свои ключи, посмотрите так ли это(для варианта предложенного по умолчанию):
Если вы задали имена, то смотрите уже по своим именам, например так:
cat ~/my_key.pub
cat ~/my_key
Теперь нам нужно отправить публичный ключ на VPS сервер, на нём поднят сервер ssh и мы имеем доступ к нему по паролю. Делается это с помощью следующей команды, с разделителем в виде @ между именем пользователя и ip адресом:
ssh-copy-id root@111.111.111.111
если же вы поменяли имена ключей на свои, то добавляется опция -i где уточняется имя ключа:
ssh-copy-id -i ~/my_key root@111.111.111.111
однако если ваш ssh сервер настроен вами на другой порт, т.е. не 22, который по умолчанию, а например на 3333, это могут сделать и провайдеры, они иногда устанавливают другой порт, то команда будет следующей(это для ключей созданных с именами по умолчанию):
ssh-copy-id -p 3333 root@111.111.111.111
Или для своих имён ключа, соответственно, если был указан и порт 3333. При этом опций ещё может быть сколько угодно, при необходимости...
ssh-copy-id -i ~/my_key -p 3333 root@111.111.111.111
При выполнении этой команды потребуется ввести Пароль доступа к серверу, который вам естественно должен быть известен, при создании сервера от провайдера. Вводим свой пароль, допустим это 12345678
Однако добавление своего (клиентского) публичного ключа на сервер можно сделать и вручную, обычно я так и делаю, по ряду причин, просто если например у вас сейчас есть доступ только через веб консоль к своему серверу... По сути всё, то что мы проделали выше с помощью команд, заключается в следующих простых операциях.
Вот, что нужно было в итоге сделать на сервере
- - Убедитесь, что файл authorized_keys находится на сервере в каталоге ~/.ssh/ т.е. в домашнем каталоге аккаунта, от которого вы планируете подключаться (в данном случае, в домашнем каталоге пользователя root). Если такого файла ещё нет, просто создайте его там.
- - Убедитесь, что права доступа к файлу authorized_keys установлены как 600 (-rw-------). Вы можете установить права с помощью команды chmod 600 ~/.ssh/authorized_keys.
- Теперь убедитесь, что в файле /etc/ssh/sshd_config на сервере установлен(раскоментирован) параметр AuthorizedKeysFile .ssh/authorized_keys (без пробелов перед и после .).
- <Также убедитесь, что другие параметры, связанные с аутентификацией по ключам, правильно настроены, например обязательно должна быть такая строка PubkeyAuthentication yes.
- Если вы не желаете, чтобы к серверу был доступ по паролю, а только по этому вашему ключу(обычная практика), то обязательно установите такое правило PasswordAuthentication no, но будьте внимательны, после этого вы должны понимать, что если случайно удалите свой ключ на клиентской машине, то не сможете войти на свой сервер(можно конечно сделать бэкап этой пары ключей приват+публичный, и хранить их в зашифрованном виде отдельно, например на флэшке).
Теперь используя данные клиента, нужно сделать следующее:
- Пару ключей мы уже создали выше. Поэтому, т.е. у себя на клиентской машине, заходим в тот же каталог cd ~/.ssh и выводим на экран содержимое файла публичного ключа cat ~/.ssh/id_rsa.pub и скопируем его в буфер
- Убедимся, что мы правильно скопировали это содержимое публичного ключа в буфер, без лишних знаков и/или пробелов, ни перед, ни после ключа, и вставим это содержимое в файл authorized_keys на нашем сервере, который мы создали чуть выше. Ключ в этом файле должен быть в одной строке.
- Ещё раз проверим, что мы правильно скопировали ключ, который начинается с ssh-rsa и содержит точно публичный ключ, а не приватный (публичный ключ намного короче приватного...) Если же у вас есть пробелы, или лишние символы перед, или после ключа, то это может вызвать проблемы с аутентификацией.
-
теперь на сервере перезагрузим службу sshd
sudo /etc/init.d/ssh restart
☯
Terminal:
⌕
≡
✕
[username@myclient ~]$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDlkRt8cP/FB1n5zCGxpY4Q+mCQXw4ivtTkMlSV/U69ViGL2yFVK6AJDPfLOIwxi40rSekTRc/AY6Oy+uQc2keLCERCiDnPxZ1W9lfHqmKhOGw+qLN1kE+muB9iPVyEsSlUu4Vr8LWsItaf9vUfQNviyUegaeN/JSADFeewfsdfaSDFASDFASfewfSAFASFASFwefasdFSDFAEWfasdFASFdbEufgcWTwbYxD1mkXeymdINlBBPXHVGJklNUtW3vXXmMj2uGNREPUnz//IDGiWm1XI7Hcx9/ZoeRIoCSwLWcAr39BhiuBvhPVLQ6g2w3Bs3f2Wxu8MLXayyLE6fdxT2WdWpX2h7tqnTkmDAPpK1bmyG/vKoQiKtubIY7ie2dNwJCA9fVvHaJP3Jq/n/Uuz5pJXYSCOJd3dnBEjatrucB8zFIIXISIqrlVcw9D3pgcUwgH+h/osas6MKVpmpLui9+H8+oj3MAdR+t4zkwOzKyB9l4GwsVsxNDCorNwOh7qrjk= username@myclient
☯
Terminal:
⌕
≡
✕
[root@myserver ~]$ cat ~/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDlkRt8cP/FB1n5zCGxpY4Q+mCQXw4ivtTkMlSV/U69ViGL2yFVK6AJDPfLOIwxi40rSekTRc/AY6Oy+uQc2keLCERCiDnPxZ1W9lfHqmKhOGw+qLN1kE+muB9iPVyEsSlUu4Vr8LWsItaf9vUfQNviyUegaeN/JSADFeewfsdfaSDFASDFASfewfSAFASFASFwefasdFSDFAEWfasdFASFdbEufgcWTwbYxD1mkXeymdINlBBPXHVGJklNUtW3vXXmMj2uGNREPUnz//IDGiWm1XI7Hcx9/ZoeRIoCSwLWcAr39BhiuBvhPVLQ6g2w3Bs3f2Wxu8MLXayyLE6fdxT2WdWpX2h7tqnTkmDAPpK1bmyG/vKoQiKtubIY7ie2dNwJCA9fVvHaJP3Jq/n/Uuz5pJXYSCOJd3dnBEjatrucB8zFIIXISIqrlVcw9D3pgcUwgH+h/osas6MKVpmpLui9+H8+oj3MAdR+t4zkwOzKyB9l4GwsVsxNDCorNwOh7qrjk= username@myclient
Вот и всё, мы добавили свой публичный ключ, в разрешённые хосты этого сервера в файл authorized_keys на сервере. Пробуем осуществить вход, нам не нужно уже вводить пароль, поэтому мы можем отключить возможность входа на этот сервер по паролю, сохранив только возможность входа по ключам с нашего хоста. Итак заходим на сервер так:
Если вы всё сделали правильно, у вас не будет запрашиваться пароль, от сервера, но если вы установили парольную фразу на сам ключ при создании, её нужно будет вводить, чтобы иметь возможность использовать этот ключ.
И при первом подобном входе, Вы увидете следующее сообщение:
☯
Terminal:
⌕
≡
✕
The authenticity of host '111.111.11.111 (111.111.11.111)' 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
Появится консоль сервера. Вы внутри, только теперь отключаем возможность входа на сервер по паролю, для усиления безопасности, так как с этой машины мы можем входить без него.
Внимание далее идут команды запускаемые в консоле нашего сервера. После уже нашего успешного подключения. Так, как в этом случае мы залогинены под супер-пользователем root, приставка sudo нам не требуется.
Отключение проверки пароля
Если вы пожелаете, чтобы никто кроме вас более не смог войти на этот сервер и тоже настроить свои ключи ssh для входа, то вход по паролю нужно сразу отключить. Если вы это сделаете, то только хосты, что уже успели и имеют настройку по ключам, смогут входить на этот сервер, поэтому убедитесь, что ваш ключ надёжно сохранён, и сейчас вы входите на сервер не вводя пароль пользователя сервера(не путайте с парольной фразой ключа, её вы будете вводить в любом случае,если вы её установили при создании ключа).
Будьте очень внимательны, ибо если вы сейчас входите только по паролю пользователя, то отключив эту опцию, вы больше удалённо не войдёте на свой сервер.
Итак, авторизуйтесь на сервере сейчас без ввода пароля, затем откройте конфигурационный файл /etc/ssh/sshd_config и найдите там директиву PasswordAuthentication. Раскомментируйте её если нужно, и установите значение в No:
на Ubuntu или Debian это делается так
теперь ищем в файле sshd_config строку
и заменяем yes на no
сохраняем изменения и перезапускаем сервис ssh командой
однако, если вы при попытке подключиться получаете что-то вроде этого:
то проверьте всё, ещё раз внимательно
- Убедитесь, что публичный ключ, который вы добавили в файл ~/.ssh/authorized_keys на сервере, соответствует вашему приватному ключу на клиентской стороне.
- Проверьте, что права доступа к вашему домашнему каталогу и файлам .ssh на сервере установлены правильно:
- - Домашний каталог должен иметь разрешение 755 (drwxr-xr-x).
- - Каталог .ssh должен иметь разрешение 700 (drwx------).
- - Файл authorized_keys должен иметь разрешение 600 (-rw-------).
- Проверьте, что параметры PubkeyAuthentication и AuthorizedKeysFile в файле /etc/ssh/sshd_config настроены правильно, как вы указали.
- Проверьте, работает ли служба SSH на сервере. Команда lsof -i -P -n выводит список открытых сетевых соединений и портов. Вы ищете строку, связанную с процессом sshd и стандартно портом 22. В нашем случае, вы должны видеть:
lsof -i -P -n
☯
Terminal:
⌕
≡
✕
sshd 692 root 3u IPv4 24754 0t0 TCP *:22 (LISTEN) sshd 692 root 4u IPv6 24764 0t0 TCP *:22 (LISTEN)
- Перезапустите службу SSH
-
- Roman Sakhno
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.