Авторизация SSH на удаленной машине по ключу
cd ~/.ssh
Создаем новый ключ на примере ed25519, если ранее был создан такой ключ, терминал выдаст запрос на указание имени файла, можно назвать как угодно.
ssh-keygen -t ed25519 -C "your_email@example.com"
При создании ключа будет запрос на ввод парольной фразы, ее можно не вводить, оставив пустой. Но для большей защиты, лучше ввести фразу, при этом как правило ее надо будет вводить всего один раз, при первом соединении с удаленным сервером, при последующих соединениях об этом позаботится ssh-agent который запоминает и хранит эти данные.
Проверяем и запускаем ssh-agent:
eval "$(ssh-agent -s)"
Выдаст нечто вроде - Agent pid 27143 то все хорошо.
Добавляем ключ в ssh-agent, если имя ключа не изменяли, иначе пишем свое имя:
ssh-add ~/.ssh/id_ed25519
Далее надо скопировать содержимое публичного ключа, оно находится в файле имя.pub
cat ~/.ssh/id_ed25519.pub
Зайти в свой профиль github.com далее найти в меню раздел SSH and GPG keys и в нем нажать кнопку New SSH key и скопировать в поле содержимое публичного ключа. Название произвольное, тип ключа Authentication Keys и сохранить нажав кнопку Add SSH key
Проверяем соединение набрав в терминале команду:
ssh -T git@github.com
При первом соединении нужно будет ответить на запрос yes и если все сделано правильно, можно будет увидеть нечто:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
Настройка доступа к удаленному серверу
Если на локальной машине есть утилита ssh-copy-id, то перекинуть ключ на удаленную машину можно одной командой:ssh-copy-id -i ~/.ssh/id_ed25519.pub user@you-hostname.com
Где user это имя пользователя с уже настроенным входом по паролю SSH а you-hosname.com это доменное имя или ip адрес удаленного сервера. После ввода команды потребуется ввести пароль учетной записи user.
Если первый вариант не вариант, копируем вручную, входим под пользователем user на сервер:
ssh user@you-hostname.com
Создаем директорию .ssh если она не существует, файл authorized_keys и даем права доступа:
mkdir ~/.ssh; chmod 0711 ~/.ssh
touch ~/.ssh/authorized_keyschmod 0600 ~/.ssh/authorized_keys
Теперь через встроенный текстовый редактор nano нужно поместить содержимое публичного ключа id_ed25519.pub на локальной машине в файл authorized_keys на удаленной машине:
nano ~/.ssh/authorized_keys
После ввода откроется окно текстового редактора в терминале, далее копируем содержимое ключа на локальной машине в буфер обмена, как было описано ранее и вставляем в окно редактора nano. Чтобы сохранить изменение файла authorized_keys нужно нажать комбинацию клавиш CTRL + O (латинская буква O) и нажать Enter. Для выхода из редактора жмем CTRL + X и закрываем окно терминала. Проверяем что все работает, выполняя повторный вход:
ssh user@you-hostname.com
Теперь можно запретить вход по SSH пользователю root, для этого надо войти на сервер от его имени и отредактировать файл /etc/ssh/sshd_config
nano /etc/ssh/sshd_config
Открываем и ищем директиву PermitRootLogin, по файлу можно перемещаться стрелками. Возможно варианты: PermitRootLogin yes - вход разрешен, no - вход запрещен, without-password - вход разрешен только по ключам. В моем случае вход по SSH под root не нужен, поэтому изменяю на PermitRootLogin no и сохраняю файл. Теперь чтобы изменения вступили в силу, перезапустим службу:
service sshd restart
Выходим или закрываем окно терминала и проверяем, что вход запрещен. Теперь если понадобятся привилегии root на удаленной машине, можно сменить пользователя user на root и ввести пароль:
su root
Конечно перед этой операцией надо убедиться что работает хоть какой то доступ по SSH от пользователя, иначе доступ будет потерян.
Комментарии
Отправить комментарий