Инструкция по созданию ключей для организации удаленного доступа между серверами без ввода пароля.
Создание пары ключей на локальном сервере
Для общего случая наименование ключа рекомендую оставить по умолчанию. В противном случае его будет необходимо всегда указывать.
Чтобы доступ к ключу осуществлялся без ввода пароля его необходимо оставить пустым.
1 2 3 4 5 6 7 |
[root@server ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/root/.ssh/id_rsa. Your public key has been saved in /home/root/.ssh/id_rsa.pub. |
Установка публичного ключа на удаленном сервере
Рекомендую использовать утилиту ssh-copy-id для переноса публичного ключа на удаленный сервер.
1 2 3 4 5 6 |
[root@server ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub backup@remoteserver Now try logging into the machine, with "ssh 'backup@remoteserver'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. |
Если такой утилиты вдруг нет, то необходимо выполнить такую последовательность на примере аккаунта backup на удаленном сервере remoteserver:
1 2 3 4 5 6 |
[root@server ~]$ ssh backup@remoteserver "mkdir -Z unconfined_u:object_r:ssh_home_t:s0 /home/backup/.ssh" [root@server ~]$ ssh backup@remoteserver "chmod 700 /home/backup/.ssh" [root@server ~]$ ssh backup@remoteserver "touch /home/backup/.ssh/authorized_keys" [root@server ~]$ ssh backup@remoteserver "chmod 600 /home/backup/.ssh/authorized_keys" [root@server ~]$ scp ~/.ssh/id_rsa.pub backup@remoteserver:/home/backup/key.pub [root@server ~]$ ssh backup@remoteserver "cat /home/backup/key.pub >> /home/backup/.ssh/authorized_keys" |
Так же необходимо убедится, что на удаленном сервере разрешена аутентификация по публичному ключу и в настройках sshd указан тот же самый файл .ssh/authorized_keys, где лежат публичные ключи.
1 2 3 |
[root@server ~]$ ssh root@remoteserver "cat /etc/ssh/sshd_config | grep -E "(PubkeyAuthentication|AuthorizedKeysFile)"" PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys2 |
Значение PubkeyAuthentication должно быть yes. Если значение AuthorizedKeysFile отличается от .ssh/authorized_keys, как на примере, то необходимо либо переименовать файл с публичными ключами на удаленном сервере на тот, что указан в настройках sshd или изменить настройки sshd таким образом, чтобы значение AuthorizedKeysFile было равно .ssh/authorized_keys.
Проверка
1 |
[root@server ~]$ ssh backup@remoteserver "ls -l /home/backup/" |
Если пароль удаленным сервером не запрошен, то все настроено верно.
Если имя ключа расположенного в каталоге ~/.ssh отличается от имен по умолчанию (id_dsa, id_ecdsa, id_rsa), то его необходимо указывать явно с ключом -i, как это показано на примере ниже.
1 |
[root@server ~]$ ssh -i /root/.ssh/id_rsa_backup backup@remoteserver "ls -l /home/backup/" |
Ограничение доступа по паролю
На стороне сервера авторизация по паролю для конкретного аккаунта может быть заблокирована следующей командой:
1 |
[root@server ~]$ passwd -l backup |
Где, backup — имя аккаунта.