Ssh в linux

Введение

Пару слов о чем тут пойдет речь. Для подключения по ssh можно использовать связку логин-пароль, а можно логин-сертификат. В интернете всюду рассказывают о том, что сертификат это безопасно и надо обязательно использовать его для авторизации на сервере. Все, что не по сертификату — дурной тон и дилетантство. Я совершенно не разделяю это мнение и сам всегда использую связку логин-пароль, более того, я чаще всего захожу сразу под root. Я искренне не понимаю, зачем заходить под обычным пользователем и каждый раз вводить sudo и пароль. Я захожу на сервер для совершения административных действий и мне всегда нужны полные права. Что мне там делать под обычным пользователем ума не приложу.

За все время моей работы с серверами у меня никогда не было проблем, связанных с авторизацией по паролю, поэтому я считаю пустой тратой времени какие-то дополнительные действия в этом плане, если нет особой необходимости. Доводы о том, что пароль могут сбрутить выглядят несостоятельными. Пароль должен быть сложным, и брутить его никто не будет. Даже если будут, то есть fail2ban, который быстро отключит желающих побаловаться. Хотя я сомневаюсь, что сейчас кто-то занимается брутом ssh.

Уточню важный момент — все сказанное выше относится к ситуациям, когда я единственный администратор сервера и кроме меня на него больше никто не заходит. Если это не так, то тут уже возникают нюансы, в зависимости от ситуации, где нужно использовать сертификаты, разные учетные записи пользователей и sudo, к примеру, для логирования действий различных пользователей.

Об одном таком нюансе я и расскажу. Мне понадобилось настроить авторизацию ssh по сертификату. Причем авторизовываться будет сразу пользователь root. Заходить будут как по паролю, так и по сертификату. Мне необходимо вести учет того, кто по какому сертификату подключился по ssh к серверу.

Использование открытого/закрытого SSH ключа в Unix/Linux

Чтобы посмотреть содержание ключа, используйте:

$ cat ~/.ssh/l1_key.pub

И получите что-то типа:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC9raaaCmx9CvnAr8ffiODwocbkmmgvIG64AAwGkCDE0iaz0Xl3BJg98+WM8W0IAbNXMPdxjsRbhpUBWb966vsZ0u/ZYdreUOyOgFKLb5nnGh7qC1Sbv8Yp0MvC1M7g/BQimnG1UHv5C0iZDdxlP7Sj9H5Mwf1rpfQCd95j9nWcpJBgrZxvaRhNS+EA5nrg0BtebkznHdWe4f84sUzAWsZZNcd//V5aIF5f5pSHyzCrcMXPppLWOoUJ+xlAj9AUJ74AxGVmlh4au2LHDCpYKAnXpzV5+hy9E8yMGl44Sa3fDHwWX5p3a9r8LdKlYIYVAo3HQsS2Fqw7/m3qmo2+hDvurJWWJUCeQQFL/5MuIN4QS/xUdXutegQImT5ikrEIakSS8NIzaj6ZjpHR+fbl/WdO7/UhoIJYPHjQ7fSVOuMaz5+ZjRZK7QFdG2QXubUUkh1NdI+31T2vZlvAhyMtxMSzj5m014gvPPwPRNiBqwSvHKEe2trA8/bIVgme34YkLhUA58Pqzgc7GHRzwty11ejywZdxonwivX3UCAPcD/95xuIeHcF5OO8y4bWABHvTvdkmB/3RV5S5vkxATqdqqM5+QrUyEzePERgZzKcj+gRqDIozMrVh1jSiX2lwtutJ1iU0YrRhVVph9BJLmcewqb+yDv5eJT+luNNvQy6AvXzuiw== shared_L1_team_acc

На mac OS X имеется функция которая позволяет копировать в буфер, например:

$ cat ~/.ssh/l1_key.pub| pbcopy

Данный ключ стоит скопировать на удаленный сервер следующим образом:

$ ssh-copy-id -i ~/.ssh/YOUR_KEY YOUR_USER@YOUR_HOST

Где:

  • YOUR_KEY — Ваш сгенерированный ключ.
  • YOUR_USER — Ваш пользователь на удаленной машине.
  • YOUR_HOST — Ваш хост на удаленной машине.

Должен появиться файл:

$ ls -alh ~/.ssh/l1_key.pub

И, добавим содержание ключа в:

$ cat ~/.ssh/l1_key.pub >> ~/.ssh/authorized_keys

Или если используется ~/.ssh/authorized_keys2, то применяем аналогичные действия:

$ cat ~/.ssh/l1_key.pub >> ~/.ssh/authorized_keys2

PS: Можно еще одной командой выполнить ряд аналогичных действий:

# cat ~/.ssh/YOUR_KEY.pub | ssh YOUR_USER@YOUR_HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Осталось уже долго, идем дальше….

Изменение ssh_config

В зависимости от Unix/Linux ОС, ssh_config может лежать в разным местах.

Пример файла в Debian/Ubuntu:

# vim /etc/ssh/ssh_config

Пример файла в Redhat/Fedora/Centos:

# vim /etc/ssh/sshd_config

Примерный вывод:

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
GSSAPICleanupCredentials yes
X11Forwarding yes
UseLogin no
AllowUsers captain root
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

В данном конфиге (я имею ввиду по этой теме), нас интересует следующие строки:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

После того как привели к такому виду, перезапускаем ssh:

# service sshd restart

Подключаемся к удаленному серверу:

$ ssh -i l1_key your_username@your_host_ip

Вот еще полезное чтиво:

Другие темы можно найти на сайте

Тема «Сгенерировать открытый/закрытый SSH ключ в Unix/Linux» завершена.

Использование ключей

P.S. Здесь я рассматриваю случай подключения из Windows к Linux серверу.

Для интереса посмотрим содержимое файлов ключей созданных в PuTTY. Публичный ключ:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170813"
AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKI
rgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6le
UZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6
tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7Dtb
NFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6f
omx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw==
---- END SSH2 PUBLIC KEY ----

Этот ключ нам нужно поместить на сервер. Но в данном виде он для этого не годится. Есть два варианта: либо привести ключ к виду:

либо открыть приватный ключ в Puttygen и скопировать Public key оттуда. В том и другом случае ключ будет выглядеть как-то так:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKIrgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6leUZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7DtbNFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6fomx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw== rsa-key-20170813

То есть из ключа удалены переносы строк, перед ним вставлена фраза «ssh-rsa», а после ключа — комментарий. Кстати, в Linux ключ сохраняется сразу в таком виде.

Если вы устанавливаете ключ на сервер вручную, то его необходимо поместить в файл /home/username/.ssh/authorized_keys . На самом сервере это можно сделать к примеру так:

Если вы создаёте VDS-сервер, то обычно хостер предоставляет возможность сразу указать ключи. Рассмотрю DigitalOcean и Scaleway.

В панели DigitalOcean необходимо перейти в Settings (настройки), затем выбрать Security (безопасность) и нажать кнопку Add SSH key.

В поля вставляем наш публичный ключ и комментарий.

Готово. Теперь мы видим отпечаток ключа.

У Scaleway делается аналогично. Переходим в Credentials (полномочия?).

Вставляем ключ и нажимаем кнопку Use this SSH key.

Видим ключ:

Который после обновления страницы превращается в отпечаток:

После этого можно создавать VDS-сервер.

Теперь смотрим приватный ключ (часть файла):

PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: rsa-key-20170813
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAidv/Xk0Sj+eHBg91AAX+ISn/RWEoZwFONsKI
rgMwqkZmrqDEFCjbn0aUYSuZjKAOH/uMQHm3KQmtVG62xHePevg4/ZG4bEGeM6le
UZLkCqdhhwat/JTEu9chQZktWF/Ok3IRHOPlZ8Se6Qg3lEBuijSk6VHSSBJeNY+6
tWAtB9h1vrh5PMJce2IEkXJtcFgXVUSvtxOtHpOUwdgNg5U69knrozJXTS6W7Dtb
NFZlf8BYHNy6f/06/dks2r3QFC/f+a7yrj7AMs0HDm/8ZYOBwWS3tuLqyPC2Wx6f
omx2yhIuXr1G+86N9+29Q+lMnAkbMSvCKDwH/9YJxlNKbGAZxw==
Private-Lines: 14
F8Q44u5El96ttrGZkwBB36NhgBohmQI+/8TkBaTCqqLjPGKTl21cSQkp4epdgRn8
9MGsrgktyKC2KqE8N+SWSBIpli7cPqTMlOSowT5gj6RSZs3kpZlgUan5cZG0DN3R
...
gG7WibKiyC3gVraFn4XiyqurZ4uPGZ313flq7dPqE6cYwAqm3JiQXcq5SsklnN+F
Private-MAC: 8d8b1d632d0923614c72d2220902e787d151c145

Абсолютно ничего интересного. К счастью, ничего нам с ним делать не нужно, нам нужен просто этот файл целиком. Открываем программу PuTTY authentication agent (Pageant), которая сразу же прячется в системный трей. Вытаскиваем её оттуда щелчком по значку. Видим такое пустое окно:

Жмём кнопку Add key, выбираем приватный ключ, вводим пароль от него. Всё, ключ загружен. Программу можно закрыть (она будет свёрнута в трей).

Пока Pageant висит в трее с загруженными ключами, у вас есть беспарольный доступ к серверу. Теперь просто как обычно подключаемся к серверу по SSH, используя PuTTY. Вводим логин… и всё) Пароль от нас уже не потребуют.

В следующей статье расскажу об одном из способов хранения SSH ключей.

Установка пакетов SSH

Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu

$ sudo apt-get install ssh

В CentOS

$ yum -y install openssh-server openssh-clients

После чего начнется процесс установки

Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.

Генерация ключей в Windows

Для генерации ключей в Windows можно использовать утилиту PuTTY Key Generator (Puttygen) из PuTTY. Работать в ней очень просто. Единственное, что в ней нужно сделать — выбрать тип ключа (RSA) и его длину. И нажать кнопку «Generate».

Во время процесса генерации нам рекомендуют двигать мышью внутри окна, чтобы увеличить энтропию. По окончанию процесса увидим такое окно:

В самом верхнем поле мы видим наш публичный ключ. Его можем публиковать хоть на своей странице в соц.сетях. Это не опасно. Отсюда же его и удобно копировать для вставки на сервер. Но об этом позже.

Key fingerprint — отпечаток ключа. Короткая последовательность байт, которая идентифицирует наш публичный ключ.

Key comment — просто комментарий к ключу. Никак не используется и служит только для нашего удобства. Если ключей у вас много от разных серверов, то лучше их подписать.

Key passphrase — а вот сюда необходимо ввести пароль (и ниже повторить), которым мы защитим наш ключ в случае кражи.

После этого жмём кнопки «Save public key» и «Save private key». Впрочем, сохранять публичный ключ не имеет смысла, так как он продублирован в файле приватного ключа.

Примечание

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

Копирование открытого ключа на сервер

Добавить открытый ключ на сервер можно несколькими способами.

Примечание: На каждый сервер можно добавить неограниченное количество SSH-ключей.

Добавить открытый ключ на сервер можно несколькими способами. Рассмотрим несколько из них, начиная с простейшего. Выберите самый удобный для вас метод и используйте его, чтобы добавить открытый ключ на сервер.

Копирование ключа с помощью ssh-copy-id

Если на локальном компьютере установлена утилита ssh-copy-id, с её помощью вы можете быстро добавить открытый ключ на удалённый сервер. Обычно (но не всегда) утилита ssh-copy-id включена в пакет OpenSSH.

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

Вы можете установить её или воспользоваться другим методом копирования ключа.

В команде ssh-copy-id нужно указать IP-адрес или доменное имя, а также имя пользователя, для которого нужно добавить эти SSH-ключи.

Команда может вернуть:

Это значит, что локальный компьютер не узнаёт удалённый сервер, потому что ранее SSH-ключи никогда не использовались при аутентификации. Чтобы продолжить, введите yes и нажмите RETURN.

Утилита сканирует локальную учетную запись пользователя в поисках открытого ключа, id_rsa.pub. Когда она найдёт нужный файл, она запросит пользователя удалённого сервера.

Введите пароль и нажмите RETURN. Утилита подключится к аккаунту пользователя на удалённом хосте и установит открытый ключ; это происходит путём копирования содержимого файла id_rsa.pub в файл .ssh/authorized_keys в домашнем каталоге удалённого пользователя.

Если копирование прошло успешно, на экране появится:

Теперь открытый ключ добавлен в файл authorized_keys удалённого пользователя, и сервер сможет принять закрытый ключ для аутентификации.

Примечание: Скопировав ключ на удалённый сервер, можете переходить к разделу «Аутентификация с помощью SSH-ключей».

Копирование ключа через SSH

Если на вашем сервере нет утилиты ssh-copy-id, но есть парольный SSH-доступ к серверу, вы можете установить открытый ключ с помощью SSH-клиента.

Для этого нужно вывести открытый ключ на локальном компьютере и передать его по SSH на удалённый сервер. На удалённом сервере нужно создать каталог ~/.ssh (если такого каталога нет), а затем добавить открытый ключ в файл authorized_keys в этом каталоге. Используйте перенаправление потока >>, чтобы вставить ключ в файл authorized_keys (если ранее вы добавляли SSH-ключи на удалённый сервер, такой файл уже существует; при этом ключи не будут переписаны новыми ключами).

Если вы не изменили название файла открытого ключа по умолчанию (id_rsa.pub), используйте эту команду:

Команда может вернуть такое сообщение:

Это значит, что локальный компьютер не узнаёт удалённый сервер, потому что ранее SSH-ключи никогда не использовались при аутентификации. Чтобы продолжить, введите yes и нажмите RETURN.

Команда запросит пароль удалённого пользователя:

Введите пароль и нажмите RETURN. Если команда выполнена успешно, она не вернёт никакого вывода. Ключ id_rsa.pub будет добавлен в файл authorized_keys.

Примечание: Скопировав ключ на удалённый сервер, можете переходить к разделу «Аутентификация с помощью SSH-ключей».

Копирование ключа вручную

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

Процесс не меняется: вам нужно взять открытый ключ на локальной машине и добавить его в .ssh/authorized_keys в домашнем каталоге удалённого пользователя.

Войдите на удалённый сервер:

При этом может появиться сообщение:

Это значит, что локальный компьютер не узнаёт удалённый сервер, потому что ранее SSH-ключи никогда не использовались при аутентификации. Чтобы продолжить, введите yes и нажмите RETURN.

После этого будет запрошен пароль удалённого пользователя:

Создайте каталог .ssh в домашнем каталоге удалённого пользователя, если такого каталога пока что нет:

Вернитесь на локальную машину и запросите открытый SSH-ключ:

Скопируйте вывод в буфер, затем откройте файл authorized_keys в текстовом редакторе:

Вставьте в него открытый ключ, а затем сохраните и закройте файл (Esc, a, a).

Открытый ключ SSH теперь добавлен на удалённый сервер.

Настройка и подключения PuTTY

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

Создаем новый сеанс пиши на IP Адрес к серверу.

Далее, мы выбираем меню категорию SSH и там выберем под категорию Auth

В поле Private key file for authentication загружаем наш приватный ключ.

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

Остаётся только проверить правильность аутентификации к SSH серверу по ключу. Запустите PuTTY и подключитесь к своему серверу. Если вы при создании, ключа заполнили поле Key Passphrase и Confirm Passphrase то вас запросит вести этот пароль. Если же всё настроено неправильно, то будет выдано сообщение об ошибке и предложено ввести пароль.

Использование пароля

Начнем с инструкции о том, как подключиться к удаленному серверу через SSH по логину и паролю. Это самый простой способ. Хостер предоставляет вам IP-адрес, логин и пароль. Этого достаточно для того, чтобы установить соединение с удаленным сервером.

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

Моя основная система — Windows. Раньше для подключения к серверу через SSH я пользовался сторонней утилитой PuTTY, потому что в операционной системе не было встроенного компонента. В «десятке» он появился, так что теперь можно подключаться к SSH через командную строку (cmd).

Чтобы включить встроенный в систему OpenSSH:

  1. Откройте «Параметры» (Win + I) и перейдите в раздел «Приложения».
  2. Выберите опцию «Управление дополнительными компонентами».
  3. Нажмите «Добавить компонент».
  4. Выберите в списке OpenSSH Client и нажмите «Установить».
  5. После завершения установки перезагрузите систему.

Теперь разберемся, как подключиться к SSH через cmd. Запустите командную строку и выполните запрос вида ssh root@185.104.114.90.

Значение root — логин для подключения, вы получили его в письме при создании сервера. 185.104.114.90 — IP-адрес сервера. Его можно посмотреть в панели управления сервером или в том же письме, которое прислал хостер. У команды может быть также дополнительный параметр -p, после которого прописывается номер порта. По умолчанию используется порт 22. Если у вас настроен другой порт, нужно явно его указать, — например, полный адрес может выглядеть так: ssh root@185.104.114.90 -p 150.

После выполнения команды клиент SSH предложит добавить устройство в список известных. Введите в командной строке yes и нажмите на Enter. Затем укажите пароль для доступа к серверу. На этом подключение к серверу через SSH завершено — теперь все команды будут выполняться на удаленной машине, к которой вы подключились.

На версиях младше Windows 10 1809 нет встроенной поддержки протокола OpenSSH. В таком случае понадобится сторонняя утилита. Смотрим, как через PuTTY подключиться по SSH:

  1. Запустите PuTTY.
  2. На вкладке Session укажите Host Name (IP-адрес сервера), Port (по умолчанию 22, но если вы в конфигурации сервера указали другой порт, нужно задать его номер).
  3. Убедитесь, что тип соединения установлен SSH.
  4. Нажмите на кнопку Open, чтобы подключиться.

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

Подключение на Linux и macOS

Теперь посмотрим, как подключиться по SSH через терминал на Linux. Для этого не требуется установка дополнительных компонентов, все работает «из коробки».

  1. Запустите терминал. Обычно для этого используется сочетание клавиш Ctrl+Alt+T. Найти терминал также можно по пути «Главное меню» — «Приложения» — «Система».
  2. Выполните команду для подключения. Синтаксис такой же, как на Windows, — ssh root@185.104.114.90. Если порт не стандартный, то нужно явно его указать: например, ssh root@185.104.114.90 -p 150. Вместо root вы указываете свое имя пользователя, а вместо 185.104.114.90 — IP-адрес своего сервера.
  3. Если хост и порт указаны верно, на следующем шаге появится запрос на ввод пароля. При первом подключении также будет предложение добавить новое устройство в список известных. Для этого введите yes и нажмите на клавишу Enter.

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

Если IP-адрес или порт указаны неверно, то на экране появится сообщение об ошибке — Connection Refused. Это может также говорить о том, что доступ запрещен брандмауэром на удаленном сервере (если вы его не отключили). Чтобы разрешить подключение через SSH:

  • на сервере с Ubuntu/Debian выполните команду $ sudo ufw allow 22/tcp;
  • на сервере CentOS/Fedora выполните команду $ firewall-cmd —permanent —zone=public —add-port=22/tcp.

Цифра 22 в синтаксисе — номер порта. Если вы используете другой порт, то укажите его явно.

Если вы знаете как подключиться через SSH на Linux, то справитесь с этой задачей и на macOS. В операционной системе Apple тоже есть встроенный терминал. Синтаксис команды для подключения не меняется: ssh root@185.104.114.90, где root — ваш логин, а 185.104.114.90 — IP-адрес сервера, с которым вы устанавливаете соединение. 

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: