SSH авторизация по ключу

На клиенте (откуда собираемся подключаться к серверу) нужно создать директорию ~/.ssh, если её нет:

mkdir ~/.ssh

Перейти в неё и сгенерировать ключи:

cd ~/.ssh
ssh-keygen -t rsa
Кодовую фразу можно оставить пустой, это не так критично.

После этого в директории ~/.ssh у нас появляются 2 файла:

  • id_rsa - личный ключ, его нужно беречь от чужих глаз и рук, как зеницу ока
  • id_rsa.pub - публичный ключ, он будет храниться на серверах

Из соображений безопасности закрываем доступ к ~/.ssh всем, кроме себя:

chmod 700 ./.ssh
chmod 600 ./.ssh/id_rsa

Теперь содержимое публичного ключа нужно сохранить на сервере в файле ~/.ssh/authorized_keys

Так же, как и на клиенте, закроем посторонним доступ к директории:

~/.ssh
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

Проверьте, что SSH сервер принимает авторизацию по ключу, в файле /etc/ssh/sshd_config Раскомментируйте, или добавьте, если их нет, следующие строки:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

Так же лучше запретить авторизацию по паролям (она нам теперь не нужна): /etc/ssh/sshd_config

PasswordAuthentication no
PermitEmptyPasswords no

Теперь можете пробовать подключиться на сервер без пароля:

ssh user@server
Должно получиться. Если нет — проверяйте журнал /var/log/auth.log на наличие ошибок

Под Windows для подключения можно использовать PuTTY или KiTTY, а создать ключи с помощью puttygen.exe