SSH Key-Based Authentication
Настройка в linux
Создание пары ключей
Генерируем пару ключей, по умолчанию, ключи будут сгенерированы в директорию .ssh/
, если не была указана другая.
ssh-keygen -t rsa -b 4096
После прохождения несложного мастера, колючи можно найти здесь:
- открытый ключ
~/.ssh/id_rsa.pub
- Закрытый ключ
~/.ssh/id_rsa
На удаленно хосте, создадим директорию .ssh
если таковой не окажется
mkdir .ssh
Копирование ключа
Старый метод
Копируем публичный ключ на удаленный хост
scp /username/.ssh/id_rsa.pub username@10.10.10.12:/username/.ssh/uploaded_key.pub # либо если порт не стандартный scp -P 1215 /username/.ssh/id_rsa.pub username@10.10.10.12:/username/.ssh/uploaded_key.pub
На удаленном хосте, заносим сгенерированный нами открытый ключ в авторизованные ключи сервера. Для этого скопируйте содержимое uploaded_key.pub
в конец файла authorized_keys
cat ~/.ssh/uploaded_key.pub >> ~/.ssh/authorized_keys
Установим права
chmod 700 ~/.ssh/ chmod 600 ~/.ssh/authorized_keys
ssh username@server_ip # либо если порт не стандартный ssh -p 1215 username@server_ip
Если что пошло не так, и при подключении по прежнему просит пароль, смотрим логи на удаленном хосте, все станет ясно:
tail -f /var/log/auth.log # или так egrep "Failed|Failure" /var/log/auth.log
Если, при создании ключа была установленна парольная фраза, то есть ее возможность изменить, не генерируя ключ заново. Синтаксис таков:
ssh-keygen -p # Либо так ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] # Убираем паольную фразу ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Новый метод
sudo ssh-copy-id remoteuser@remoteserver
ssh-agent
также существует команда ssh-agent, которую можно использовать для хранения закрытых ключей, используемых для аутентификации с открытым ключом. Обычно это полезно, когда ключи защищены парольной фразой.
Чтобы добавить закрытый ключ, хранящийся в /home/username/sshkeys/id_rsa
, в ssh-agent, выполните следующие команды:
sudo eval $(ssh-agent) sudo ssh-add
Вводим парольную фразу, которая затем хранится в памяти, до тех пор, пока агент не будет остановлен. В этом случае не нужно вводить кодовую фразу при использовании SSH для доступа к удаленному серверу.
Грабли
При попытке входа по ключу, получаем в зубы – Authentication refused: bad ownership or modes for directory /root
На удаленном сервере, смотрим кто владелец директории root
ls -ld
Если нужно поправляем
chown -R root. /root
При попытке входа по ключу, получаем по лбу:
Permissions 0755 for '/root/.ssh/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 "/root/.ssh/id_rsa": bad permissions
На локальном хосте, устанавливаем правильное разрешение для /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa