вторник, 20 декабря 2016 г.

Ubuntu. Настраиваем подключение к OpenSSH по ключу.

Сегодня я расскажу вам о том как быстро настроить подключение к SSH серверу в Ubuntu по ключу. В сети конечно полно мануалов на эту тему, но вместе с тем встречаются и сотни тем на различных форумах, где люди пишут что они прочитали кучу мануалов, все сделали точно по ним, но ничего в итоге так и не получилось. Мол, ошибка "No supported authentication methods available [preauth]" в логах сервера, а на клиенте что-то вроде "Disconnected: No supported authentication methods available (server sent: publickey)" и т.п. Тем в которых люди рассказывают о том что они столкнулись с такой проблемой гораздо больше, чем мануалов по настройке - поэтому я расскажу все то же самое еще раз и постараюсь обратить на наиболее вероятные ошибки совершаемые новичками. Для начала приведу несколько полезных ссылок:


В принципе последняя ссылка описывает процесс настройки достаточно подробно, т.е.:
  1. Устанавливаем OpenSSH сервер, если он еще не установлен - sudo apt-get install openssh-server
  2. Запускаем ssh-keygen -t rsa для генерации публичного и приватного ключей, при этом если в процессе генерации не вводить имя ключа, а просто нажать enter, то ключи будут записаны в /home/%username%/.ssh/id_rsa (приватный ключ) и /home/%username%/.ssh/id_rsa.pub (публичный ключ) соответственно. Думаю с этими этапами проблем ни у кого быть не должно.
  3. Далее в конфиге OpenSSH сервера мы добавляем (или раскомментируем, если они есть) следующие строки:

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile     %h/.ssh/authorized_keys
    PasswordAuthentication no

    Первые две разрешают аутентификацию по RSA-ключу, третья укаывает где этот ключ искать, где %h означает домашнюю папку пользователя, последняя - запрещает авторизацию по паролю.
  4. Далее, сразу внесу ясность по поводу ключей. На сервере должен храниться только публичный ключ (!), приватный нужен вам на ПК с которого вы хотите подключаться к этому серверу. В данном случае, если объяснить упрощенно, публичный ключ id_rsa.pub - это некий замок, а вот id_rsa (приватный ключ) - это ключ который его открывает. На многих форумах у людей полное непонимание этого.
  5. Копируем публичный ключ в  ~/.ssh/authorized_keys следующими командами:

    cat id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

    И вот здесь обратите внимание, копировать нужно именно этими командами. Если у вас на сервере стоит графическая оболочка, то не в коем случае не стоит копировать сам ключ id_rsa.pub в папку authorized_keys средствами GUI. Потому что authorized_keys - это не папка. Это файл в котором должна находиться строчка из id_rsa.pub. Другими словами, если в папке ~/.ssh вы создадите файл authorized_keys и добавите в него строчку из id_rsa.pub, это и будет аналогично выполнению первой команды. Итак, важно чтобы вы поняли, authorized_keys - это обычный файл, в котором должно находиться содержимое id_rsa.pub .
  6. Далее копируем любым способом свой приватный ключ id_rsa на ПК с которого мы планируем подключаться по SSH. Если это ПК с Linux добавляем его в локальное хранилище (подчеркну, это не на сервере, это на ПК с которого мы хотим подключаться к серверу) - ssh-add id_rsa .
  7. Перезапускаем OpenSSH сервер на сервере командой sudo service sshd restart (да, кстати, чтобы посмотреть статус и лог последних подключений можно ввести команду sudo service sshd status).
Теперь давай посмотрим как подключиться к настроенному серверу с машины с Windows. Для этих целей я буду использовать Putty. Также нам понадобится программа puttygen, найти ее можно здесь или здесь (кстати для тех кто любит PuTTY, здесь - PuTTYTray. Удобный fork знаменитого PuTTY.  я рассказывал о его удобном форке, умеющим минимизироваться в трей при нажатии кнопки Ctrl и крестика на окне). Обратите внимание, никаких pageant'ов и т.п., которые советуют в других инструкциях нам не потребуется.

Итак, запустите PuttyGen и импортируйте в меню Conversions -> Import key ваш приватный ключ id_rsa, который вы предварительно скачали на ПК, затем нажмите кнопку Save private key и сохраните его как ppk (putty private key) файл, в моем случае я сохранил его как файл decker.ppk:


Теперь настроим сессию в самом PuTTy на автоматическое подключение:
  1. Session -> Host Name (имя вашего сервера), порт по-умолчанию 22. Тип соединения SSH.
  2. SSH -> Preferred protocol versin - ставим галочку 2 only.
  3. SSH -> Auth оставить галку Attempt "keyboard-interactive" auth (SSH-2) и в Private key file for authentification указать путь к вашему ppk файлу.
  4. Connection -> Data , в поле Auto-login username ввести ваше имя пользователя, если не хотите вводить его вручную каждый раз.
  5. Всё, сохраняем сессию (Save) и нажимаем Connect.
На всякий случай то же самое в картинках:


Для лучшего отображения на вкладке Windows -> Appearance можно установить шрифт Lucida Console (14px). Все, мы законнектились:


Если вашем сервере установлены иксы, например, у вас обычный Ubuntu Desktop, как в моем случае, можно еще настроить x11vnc на сервере (sudo apt-get install x11vnc) и подключаться к нему также посредством SSH. О том как настроить подключение к x11vnc через Putty и SSH хорошо рассказано вот здесь http://www.karlrunge.com/x11vnc/faq.html#faq-ssh-putty в вопросе Q-52: How can I tunnel my connection to x11vnc via an encrypted SSH channel from Windows using an SSH client like Putty?

Если в двух словах, то в Putty просто нужно проброс портов с сервера на локальную машину на вкладке Connections/SSH/Tunnels (Source port:  5900 -> Destination:  localhost:5900), затем подключиться через SSH, на сервере запустить x11vnc -display :0 -localhost, а в вашем VNC клиенте подключиться через localhost:5900 или localhost:0 (здесь :0 - это имя дисплея):


Ну вот как-то так ... будут вопросы - спрашивайте. С удовольствием отвечу на них в комментариях. Также неплохо было бы узнать ваше мнение, какой SSH и VNC клиент вы считаете наиболее удобным под Windows? В моем случае - это Putty Tray и VNC-Viewer, а у вас?

Комментариев нет :

Отправить комментарий