Использование SSH-ключей —простой и надёжный способ обеспечения безопасности соединения с сервером. В отличие от пароля, взломать SSH-ключ практически невозможно. Сгенерировать SSH-ключ очень просто.
Linux/MacOS
Откройте терминал и выполните команду:
$ ssh-keygen -t rsa
На консоль будет выведен следующий диалог:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Нажмите на клавишу Enter. Далее система предложит ввести кодовую фразу для дополнительной защиты SSH-подключения:
Enter passphrase (empty for no passphrase):
Этот шаг можно пропустить. При ответе на этот и следующий вопрос просто нажмите клавишу Enter.
После этого ключ будет создан, а на консоль будет выведено следующее сообщение:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
476:b2:a8:7f:08:b4:c0:af:81:25:7e:21:48:01:0e:98 user@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|+.o. |
|ooE |
|oo |
|o.+.. |
|.+.+.. S . |
|....+ o + |
| .o .... |
| . .. . |
| .... |
+-----------------+
Далее выполните в терминале команду:
$ cat ~/.ssh/id_rsa.pub
На консоль будет выведен ключ. Скопируйте его и вставьте в соответствующее поле:
Нажмите на кнопку “Добавить.”
Добавив ключ, выполните в терминале команду:
$ ssh root@[IP-адрес сервера]
После этого соединение с сервером будет установлено. Вводить пароль при этом не потребуется.
Windows
В OC Windows подключение к удаленным серверам по SSH возможно, например, с помощью клиента Putty. Скачать его можно здесь (ссылка взята с официального сайта). Putty не требует установки - чтобы начать с ним работать, достаточно просто распаковать скачанный архив.
По завершении распаковки запустите файл puttygen.exe.
Выберите тип ключа SSH-2 RSA и длину 2048 бит, а затем нажмите на кнопку Generate:
Во время генерации водите курсором в пустой области окна (это нужно для создания псевдослучайности):
Сохраните сгенерированную пару ключей на локальной машине (кнопки Save public key и Save private key).
Скопируйте сгененированный ключ и вставьте его в соответствующее поле:
tglnkSSH
В этой статье мы расскажем о том, как научим вас пользоваться нашим модулем для системы управления конфигурациями Ansible и покажем, как с его помощью можно автоматизировать развёртывание виртуальной инфраструктуры на базе Vscale.
Загрузка и первичная настройка
Прежде чем начинать работу с модулем, нужно выполнить несколько подготовительных операций. Сначала сгенерируем в панели управления токен для доступа к API.
Затем добавим переменную окружения VS_API_KEY
и укажем полученный токен в качестве её значения:
$ export VS_API_KEY=5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36
Cоздадим директории для SSH-ключей и библиотек:
$ mkdir -p vscale-ansible/{credentials,group_vars}
После этого сгенерируем SSH-ключ для доступа к серверам. Если вам требуется добавить уже имеющийся SSH-ключ, просто укажите путь к нему в конфигурационном файле (см. ниже):
$ ssh-keygen -f ./vscale-ansible/credentials/ansible
Откроем конфигурационный файл vscale-ansible/ansible.cfg и пропишем следующие настройки:
sudo_user = root remote_user = root host_key_checking = False private_key_file = ./credentials/ansible [ssh_connection] control_path = %(directory)s/%%h-%%r
Создадим также файл vscale-ansible/inventory, в котором будут указаны имена управляемых с помощью Ansible хостов:
[fe-servers] fe-[01:02] [local] localhost
После этого можно загружать модуль:
$ git clone https://github.com/vscale/ansible-vscale-modules.git ./library
Для удобства дальнейшей работы определим несколько переменных в файле vscale-ansible/group_vars/all.yml:
--- vscale_token: "{{ lookup('env', 'VS_API_KEY')}}" key: "{{ lookup('file', 'credentials/ansible.pub') }}"
Попробуем написать сценарий, с помощью которого в Vscale будет создан новый сервер с нужными нам характеристиками. Создадим в текстовом редакторе файл createserver.yml и добавим следующие строки:
--- - name: Add SSH key connection: local gather_facts: no hosts: fe-servers tasks: - name: Add SSH key to Vscale account run_once: true vscale_ssh: token: "{{ vscale_token }}" name: "Ansible" public_key: "{{ key }}" state: present
В этом фрагменте мы описали процедуру добавления SSH-ключа, воспользовавшись двумя определёнными ранее переменными (token
иpublic_key
).
Далее описываем параметры сервера, который требуется создать:
- name: Create scalet for inventory hosts vscale_scalets: token: "{{ vscale_token }}" name: "{{ inventory_hostname }}" plan: small location: spb0 image: ubuntu_14.04_64_002_master key_name: "Ansible" collect_facts: "yes" power_state: "started" state: present register: server - set_fact: ansible_ssh_host: "{{ server['scalet']['public_address']['address'] }}"
Далее установим на нашем сервере Nginx:
- name: Install NGINX and fill disk remote_user: root hosts: - fe-servers tasks: - name: Install NGINX apt: pkg: nginx update_cache: yes state: latest - name: Filling disk command: dd if=/dev/zero of=/large.file bs=100M count=150 creates=/large.file
В этом фрагменте мы не только описали стандартную процедуру установки Nginx, но и заполнили диск. Мы сделали это намеренно, чтобы вы смогли протестировать следующую часть нашего сценария:
В ней мы запускаем проверку свободного места на диске. Если свободный объём диска составляет меньше 3 Gb, конфигурация сервера будет автоматически обновлена до более производительной.
Вот и всё. Сохраним внесённые изменения и выполним команду:
$ ansible-playbook -i inventory createserver.yml
Описанный сценарий для тестирования вы можете найти в нашем репозитории.
Мы только что рассмотрели пример сценария, который просто создаёт новый сервер. Возможности использования нашего модуля таким элементарными примером не исчерпываются. Мы подготовили для вас сценарии, с помощью которых можно не только создать сервер, но и сразу же установить на нём ПО — берите и пользуйтесь:
Если вы не ещё не установили модуль по приведенной выше инструкции, то можете просто клонировать репозиторий со сценариями, а затем подключить наш модуль с помощью команды git submodule:
$ git clone https://github.com/vscale/ansible-playbooks.git
$ cd ansible-playbooks
$ git submodule init
$ git submodule update
У этого способа есть определённые преимущества: если мы подключаем какой-то репозиторий в виде подмодуля, он всегда остаётся в рабочем, консистентном состоянии. Даже если мы обновим репозиторий в основной ветке и в нём что-то “сломается”, ваш подмодуль после обновления не будет изменён.
Не забудьте сгенерировать SSH-ключ и добавить путь до него в конфигурационный файл.
Ansible — инструмент эффективный и очень удобный в работе. Его огромная популярностью во многом объясняется низким порогом вхождения. Если вы ознакомились с приведёнными в статье примеры сценариев, то вы увидели, насколько просты их структура и синтаксис. Наверняка вы сможете написать что-то своё — документация API вам в помощь. И если у вас получится что-то интересное, будем рады, если вы поделитесь результатами с сообществом.
tglnkServer
Vscale API расположен по адресу https://api.vscale.io/v1.
С его помощью можно осуществлять те же действия, что и через панель управления:
Взаимодействие осуществляется при помощи стандартных HTTP-запросов. Для обмена данными используется формат JSON.
В случае успешной обработки запроса API вернёт модель объекта в формате JSON. При возникновении ошибки вы получите её код и краткое описание (оно содержится в заголовке Vscale-Error-Message).
Документация с подробным описанием функций API опубликована здесь.
Генерация токена
Чтобы начать работу с API, нужно сначала пройти полную процедуру регистрации (включая СМС-подтверждение) и пополнить баланс. Для идентификации пользователей используются токены. Чтобы получить токен, авторизуйтесь в панели управления и перейдите на страницу настроек.
В меню в левой части страницы выберите пункт “Управление токенами”.
Нажмите на кнопку “Создать токен”. Откроется следующее окно:
Введите краткое описание токена в соответствующее поле. Обратите внимание на флажок “Тип токена”. Для работы с API используются токены двух типов:
Задав нужные настройки, нажмите на кнопку “Сгенерировать токен”. После этого новый токен будет добавлен в список. Его нужно будет передавать во всех запросах в заголовке X-Token.
Вы можете сгенерировать столько токенов, сколько вам нужно для работы. Срок действия токенов неограничен.
Пример 1 создание нового сервера
Чтобы создать сервер через графический интерфейс, нужно выполнить следующие действия: дать серверу имя, затем выбрать конфигурацию и образ ОС и, наконец, настроить способ доступа. При работе через API все необходимые характеристики сервера передаются в теле запроса. Обязательными для создания сервера параметрами являются следующие:
Запрос на создание сервера выглядит так:
$ curl -i -X POST 'https://api.vscale.io/v1/scalets' -H 'Content-Type: application/json;charset=UTF-8' -H 'X-Token: 5c21a467f3b37c331e7482599f1e0971c9bedc30258d6977bbd1db2401bb27e8' -d '{"make_from":"ubuntu_14.04_64_002_master","rplan":"medium","do_start":true,"name":"New-Test","keys":[16],"location":"spb0"}'
В случае успешного создания сервера будет возвращён ответ вида:
HTTP/1.1 200 OK {
"status": "defined",
"deleted": null,
"public_address": {},
"active": false,
"location": "spb0",
"locked": true,
"hostname": "cs11533.vscale.io",
"created": "20.08.2015 14:57:04",
"keys": [ { "name": "somekeyname", "id": 16 } ],
"private_address": {},
"made_from": "ubuntu_14.04_64_002_master",
"name": "New-Test",
"ctid": 11,
"rplan": "medium" }
Статус текущих операций
Ещё раз просмотрите пример ответа в предыдущем разделе и обратите внимание на поле status. По логике вещей при успешном создании сервера должен быть возвращён статус created, но в приведённом примере соответствующий параметр имеет другое значение — defined. Создавая серверы через графический интерфейс, изменение статусов можно наблюдать в режиме реального времени. В API такой возможности нет, и статусы объектов изменяются не моментально.
Просмотреть информацию о статусе всех текущих операций можно, выполнив GET-запрос на адрес https://api.vscale.io/v1/tasks:
$ curl -i https://api.vscale.io/v1/tasks -H 'X-Token: 5c21a467f3b37c331e7482599f1e0971c9bedc30258d6977bbd1db2401bb27e8'
Пример 2: апгрейд конфигурации
C помощью API всегда можно перейти с текущей конфигурации на более производительную. Переход на менее производительную конфигурацию (даунгрейд) невозможен.
При создании сервера в предыдущем примере мы выбрали конфигурацию medium. Чтобы изменить её large, нужно отправить следующий запрос:
$ curl 'https://api.vscale.io/v1/scalets/270834/upgrade' -X POST -H 'X-Token: 5c21a467f3b37c331e7482599f1e0971c9bedc30258d6977bbd1db2401bb27e8' --data-binary '{"rplan":"monster"}' -H 'Content-Type: application/json;charset=UTF-8'
Как видно из приведённого примера, в теле запроса было передано имя новой конфигура ции в значении параметра rplan.
В случае успешного выполнения запроса будет возвращён ответ с информацией о сервере:
{"made_from": "ubuntu_14.04_64_002_master",
"location": "spb0",
"active": true,
"created": "20.08.2015 14:57:04",
"name": "New-Test",
"deleted": null,
"tags": [ ],
"keys": [],
"ctid": 11533,
"rplan": "large",
"hostname": "cs11533.vscale.io",
"locked": true,
"public_address": {"netmask": "255.255.255.0", "gateway": "212.92.98.1 ", "address": "212.92.98.194"},
"status": "started",
"private_address": {}}
Пример 3: перезагрузка, включение и выключение сервера
Операции включения, выключения и перезагрузки серверов осуществляются с помощью PATCH-запросов:
# перезагрузка сервера
$ curl -i -X PATCH https://api.vscale.io/v1/scalets/12600/restart -d '{"id": "12600"}' -H 'X-Token: 5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36'
# выключение сервера
$ curl -i -X PATCH https://api.vsсale.io/v1/scalets/12600/stop -d '{"id": "12600"}' -H 'X-Token: 5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36'
#включение сервера
$ curl -i -X PATCH https://api.vsсale.io/v1/scalets/12600/start -d '{"id": "12600"}' -H 'X-Token: 5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36'
Пример 4: удаление сервера
Удаление к серверу осуществляется с помощью DELETE-запроса:
$ curl -i -X DELETE https://api.vscale.io/v1/scalets/12600 -H 'X-Token: 5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36'
В ответе будут возвращены параметры удалённого сервера.
Заключение
В этой статье мы привели лишь самые простые примеры работы с API. Обо всех функциях и возможностях API можно прочитать в официальной документации. Текущая версия API — первая. Если в ней, по вашему мнению, не хватает каких-либо функций, сообщите нам об этом. Ваши предложения и пожелания мы учтём в работе над второй версией.
tglnkAPI