среда, 27 июля 2016 г.

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

Не всегда удобно авторизовываться на серверах с помощью пароля, входя на них по ssh. Так же появляется возможность легко выполнять команды на удаленных серверах из скриптов, скачивать и закачивать файлы с помощью scp и многое другое.

Простая реализация авторизации по ключу:

1. Заходим на сервера, между которыми хотим создать авторизацию по ключу, под тем пользователем, от имени которого мы будем устанавливать соединение.

2. Генерируем ключевую пару у пользователя
ssh-keygen
при запросе пароля оставляем его пустым. После выполнения команды в папке пользователя появляются файлы закрытого и открытого ключа
~/.ssh/id_rsa
~/.ssh/id_rsa.pub

3. Теперь остается только создать рядом с ключами файл authorized_keys
~/.ssh/authorized_keys
в который скопировать открытый ключ с другого сервера (если доступ требуется обоюдный, то это нужно сделать и на том и на другом сервере, если надо попадать с первого на второй сервер, то достаточно открытый ключ первого сервера разместить на втором сервере).
Ключи можно скопировать, к примеру, командой
cat ./id_rsa.pub | ssh remote_user@remote_host 'cat >> ~/.ssh/authorized_keys'


Примеры использования данного подключения:

1. Исполнение команды (совсем простой пример, без проброса stdin/out)
ssh user@server ls /etc/
Можно выполнить команду, результат которой записать в локальный файл
ssh user@server command > local_file

2. Копирование файлов на удаленный сервер
scp -r dir1 user@remote.host:/some/remote/directory/dir2
или с удаленного сервера
scp user@8.8.8.8:/full/path/to/file /path/to/put/here


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

1. Создаем файл конфига
~/.ssh/config

2. Пишем в него требуемые алиасы
Host server1
        Hostname компания.рф
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.org
        User vasya_pupkin
        PasswordAuthentication no
Host server2
        Hostname 192.168.0.10
        User root
        PasswordAuthentication no

3. Подключаемся к серверу
ssh server2