- Specifying an IdentityFile with SSH
- 1 Answer 1
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- SSH (ч.4): Создание и настройка ключей OpenSSH
- Оглавление
- Вход в SSH без пароля (с использованием файлов ключей)
- Типы ключей
- Утилита ssh-keygen
- Как поменять количество битов в ключах ssh-keygen
- Добавление комментариев в ключи ssh-keygen
- Изменение паролей в ssh-keygen
- Показ публичного ключа из приватного
- Управление приватными ключами на клиенте SSH
- Управление публичными ключами на сервере SSH
- Как конвертировать .ppk ключ в OpenSSH ключ
- Связанные статьи:
Specifying an IdentityFile with SSH
I am trying to make a more streamlined means to establish an SSH client connection to a remote server. I have created a public/private keypair and used ssh-copy-id to install the public key onto the remote server. However, it still was asking for the password unless I put in the path for the identity file with something like ssh -i ~/.ssh/mykey user@host . Should I have to type this to bypass the password with public key authentication? To bypass this I used .bashrc and created an alias using this path. However, is this the way to do this? Or is it just a question of the server allowing the public key so I can just use the usual ssh user@host ?
1 Answer 1
If you are able to successfully use keypair authentication with ssh -i ~/.ssh/mykey user@host , you can easily automate this with your SSH client configuration.
For example, if you add this to your ~/.ssh/config file:
Host hostname User username IdentityFile ~/.ssh/mykey IdentitiesOnly yes # see comment in answer below
You can then simply ssh hostname , and your username and identity file settings will be handled by your config file and you’re off to the races, as they say.
The IdentityFile directive (which the -i switch for ssh overrides) has a default setting which will look for ~/.ssh/id_dsa , ~/.ssh/id_ecdsa , ~/.ssh/id_ed25519 , and ~/.ssh/id_rsa ; any other filenames for private keys must be specified in the config file or with -i on the command line.
If you add IdentityFile to your ssh config, you’ll find that the client still sends the default key (see ssh -vv output). This can be problematic when using sites like github with multiple accounts. You’ll need to include IdentitiesOnly yes if you want ssh to use only the key you’ve specified.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
SSH (ч.4): Создание и настройка ключей OpenSSH
Оглавление
Вход в SSH без пароля (с использованием файлов ключей)
Вход в SSH по публичному ключу (без пароля) очень удобен и безопасен.
Процесс настройки аутентификации по публичному ключу очень простой:
- Командой создаётся пара «публичный ключ — приватный ключ».
- Публичный ключ копируется на компьютер с сервером SSH, то есть на компьютер, к которому будет осуществляться подключение и на котором будут выполнятся команды.
- Затем подключение выполняется обычным способом, но ввод пароля уже не требуется.
Публичный ключ, который копируется на удалённый сервер, не является секретным. Один и тот же ключ можно использовать на разных серверах. Главное — хранить в секрете приватный ключ.
Сгененировать ключи и скопировать их на удалённый хост можно буквально тремя командами. Для генерации пары ключей используется программа ssh-keygen, она включена в пакет ssh и если SSH у вас уже настроен, то дополнительно устанавливать ничего не нужно.
У программы ssh-keygen много функций и возможностей, начнём с рассмотрения процедуры генерации ключей, которая выполняется элементарно.
Если вы успели залогиниться на удалённой системе, разлогинтесь. После этого наберите:
У нас спрашивают имя файла, не нужно ничего вводить, будет использовано имя по умолчанию. Также спрашивается пароль. Этот пароль позволяет установить дополнительную защиту — при подключении с помощью ключей не будет спрашиваться пароль пользователя, но будет спрашиваться пароль самого ключа. Устанавливать пароль необязательно.
В результате будет создано два файла:
Первый файл нужно хранить в секрете. Второй файл нужно скопировать на удалённый компьютер, где запущен сервер SSH.
Теперь на удалённой машине нам нужно создать каталог .ssh. В предыдущей части мы уже узнали, как выполнять команды на удалённой системе по SSH. Запустите команду вида:
ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ mkdir .ssh
ssh mial@192.168.1.36 mkdir .ssh
Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину в файл ~/.ssh/authorized_keys. Сделать это очень просто (не забываем менять данные на свои):
cat .ssh/id_rsa.pub | ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ 'cat >> .ssh/authorized_keys'
cat .ssh/id_rsa.pub | ssh mial@192.168.1.36 'cat >> .ssh/authorized_keys'
Теперь выполняем подключение с помощью клиента SSH, но пароль у нас больше спрашиваться не будет.
Типы ключей
Программа ssh-keygen можен генерировать четыре типа ключей:
Чтобы выбрать любой из этих типов, используется опция -t. В предыдущем примере мы выбрали rsa — явно указывать тип RSA необязательно, поскольку он подразумевается по умолчанию (то есть генерацию ключей можно запустить вообще без опции -t).
В зависимости от выбранного типа, названия созданных файлов ключей могут различаться:
Эти файлы нужно держать в секрете, они должны быть доступны только для владельца.
Соответствующие публичные ключи будут иметь такое же название, но с дополнительным расширением .pub:
Эти файлы не являются секретными, их содержимое нужно скопировать в файл ~/.ssh/authorized_keys на компьютер с сервером SSH.
Утилита ssh-keygen
Мы применили ssh-keygen для генерации ключей. Кроме этого она предназначена для управления и конвертации ключей аутентификации для ssh.
Далее рассмотрены только некоторые функции этой программы, с полным перечнем опций можно ознакомиться командой:
Как поменять количество битов в ключах ssh-keygen
Для этого используется опция: -b БИТЫ
Она определяет количество бит в создаваемом ключе. Для ключей RSA минимальный размер составляет 1024 бита, а по умолчанию — 2048 бит. Как правило, 2048 бит считается достаточным. Ключи DSA должны иметь длину 1024 бита, как указано в FIPS 186-2. Для ключей ECDSA флаг -b определяет длину ключа, выбирая один из трёх размеров эллиптической кривой: 256, 384 или 521 бит. Попытка использовать битовые длины, отличные от этих трёх значений, для ключей ECDSA потерпит неудачу. Ключи Ed25519 имеют фиксированную длину, и флаг -b будет игнорироваться.
Добавление комментариев в ключи ssh-keygen
Для работы с комментариями имеется две опции:
-C комментарий
После этой опции укажите комментарий.
Эта опция включает процесс изменений комментария в файлах приватного и публичного ключей. Программа сделает запрос на файл, содержащий приватные ключи, пароль (если он установлен) и затем предложит ввести новый комментарий.
Увидеть комментарий можно с помощью опции -l. Эта опция показывает отпечаток указанного файла публичного ключа. Для RSA и DSA ключей ssh-keygen пытается найти совпадающий файл публичного ключа и вывести его отпечаток. Если совместить с -v, то визуальное художественное представление ASCII будет показано после самого отпечатка:
Файл ключа можно указать явно опцией -f:
Изменение паролей в ssh-keygen
Для работы с паролями имеется несколько опций:
-P парольная фраза
Этой опцией можно передать пароль, чтобы программа его не спрашивала. При смене пароля, этой опцией передаётся старый пароль.
Эта опция вместо создания нового ключа, запускает смену парольной фразы файла приватного ключа. Программа сделает запрос, где размещён файл приватного ключа, затем спросит старый пароль и попросит дважды ввести новую парольную фразу.
-N новый_пароль
Этой опцией можно передать новый пароль, чтобы программа его не спрашивала. При создании ключей можно использовать эту опцию для указания паролей, чтобы программа не спрашивала их в интерактивном режиме.
Файл ключей нужно указать опцией -f:
ssh-keygen -p [-f КЛЮЧ] [-N НОВЫЙ_ПАРОЛЬ] [-P СТАРЫЙ_ПАРОЛЬ]
Показ публичного ключа из приватного
Опция -y прочитает файл OpenSSH формата с приватным ключом и напечатает в стандартный вывод публичный ключ OpenSSH.
Также с помощью опции -f нужно указать путь до приватного ключа, из которого будет извлечён соответствующий ему публичный ключ:
ssh-keygen -y -f ПРИВАТНЫЙ-КЛЮЧ
Например, приватный ключ помещён в файл id_rsa, тогда команда извлечения из него публичного ключа следующая:
Вы можете столкнуться с ошибкой:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "id_rsa": bad permissions
Она означает, что приватный ключ доступен для чтения кому угодно и программа ssh-keygen отказывается работать с ним по этой причине. Чтобы исправить эту ошибку, просто установите на файл с приватным ключом права доступа 600:
Управление приватными ключами на клиенте SSH
Одну и ту же пару ключей можно использовать для доступа к множеству серверов SSH. Следовательно, на каждом из них (на клиенте и на серверах) может быть по одному ключу. Тем не менее если у вас несколько ключей или если вы хотите использовать другое, не стандартное расположение файлов ключей, то далее показано, как указать расположения в строке команды и в конфигурационных файлах клиента SSH.
В конфигурационном файле клиента SSH для указания пути до приватных ключей используется директива IdentityFile. Её значения по умолчанию:
IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_dsa IdentityFile ~/.ssh/id_ecdsa IdentityFile ~/.ssh/id_ed25519
Как можно увидеть, разрешено использовать тильду для указания на домашнюю папку пользователя.
Можно иметь несколько директив IdentityFile в конфигурационных файлах; все эти идентификаторы будут опробованы по очереди. Множественные директивы IdentityFile добавят кандидатов в очередь для попыток (это поведение отличается от других конфигурационных директив).
Также можно настроить использование определённых идентификационных файлов для определённых хостов:
Host 192.168.0.1 IdentityFile ~/.ssh/id_rsa_router Host 185.117.153.79 IdentityFile ~/.ssh/id_rsa_suip Host * IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_dsa IdentityFile ~/.ssh/id_ecdsa IdentityFile ~/.ssh/id_ed25519
Для строки команды используется опция -i, после которой нужно указать путь до приватного ключа (файла идентификации). Значение по умолчанию такие же, как и у рассмотренной выше директивы. Опцию -i можно использовать несколько раз.
Управление публичными ключами на сервере SSH
Публичные ключи всех видов размещены в одном файле, значение по умолчанию:
AuthorizedKeysFile .ssh/authorized_keys
По умолчанию проверяются файлы:
Каждая строка файла содержит один ключ (пустые строки, и строки начинающиеся с ‘#’ игнорируются как комментарии). Публичные ключи состоят из следующих разделённых пробелами полей: опции, тип ключа, ключ в кодировке base64, комментарий.
Поле с опциями является необязательным.
Тип ключа это “ecdsa-sha2-nistp256”, “ecdsa-sha2-nistp384”, “ecdsa-sha2-nistp521”, “ssh-ed25519”, “ssh-dss” или “ssh-rsa”.
Поле комментария ни для чего не используется (но может быть удобным для пользоватетля идентифицировать ключ).
Как конвертировать .ppk ключ в OpenSSH ключ
Ключ .ppk генерируется при экспорте ключей из PuTTY.
Пример файла .ppk:
Конвертация ключей из файла .ppk в формат OpenSSH в Linux
Для конвертации формата .ppk в формат OpenSSH можно использовать утилиту puttygen, которая включена в пакет Putty. Следовательно, нам нужно установить PuTTY
Linux: с вашим менеджером пакетов установите PuTTY (или более минимальный пакет PuTTY-tools):
Debian, Kali Linux, Linux Mint, Ubuntu и их производные:
sudo apt install putty-tools
Дистрибутивы на основе RPM:
Arch Linux, BlackArch и их производные:
OS X: Установите Homebrew, затем запустите
Поместите ваши ключи в какую-нибудь директорию, например, в домашнюю папку. Теперь конвертируем PPK ключи в SSH пару.
Для извлечения приватного ключа:
cd ~ puttygen id_dsa.ppk -O private-openssh -o id_dsa
и для извлечения публичного ключа:
puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub
Переместите эти ключи в ~/.ssh и убедитесь, что для приватного ключа ограничены права записи:
mkdir -p ~/.ssh mv -i ~/id_dsa* ~/.ssh chmod 600 ~/.ssh/id_dsa chmod 666 ~/.ssh/id_dsa.pub
Конвертация ключей из файла .ppk в формат OpenSSH в Windows
Откройте PuTTYgen, нажмите кнопку «Load» и выберите файл .ppk с ключами.
Вы сразу увидите публичный ключ SSH, который вы можете скопировать и вставить в файл.
Теперь в меню перейдите в «Conversions» → «Export OpenSSH key» и сохраните приватный ключ.
Скопируйте ваш приватный ключ в файл ~/.ssh/id_dsa (или id_rsa).