В этом руководстве описано использование клиентской утилиты Airlock — airsh.

Вы узнаете, как:

  • Войти в кластер и получить сертификат пользователя.
  • Подключаться к серверам по SSH.
  • Работать с кластерами Kubernetes через kubectl.
  • Подключаться к базам данных.
  • Копировать файлы, просматривать узлы и записи сессий.

Полный список команд доступен также через airsh help в терминале.

Быстрый старт

# Вход в кластер Airlock. Сертификат сохраняется в ~/.airsh/airlock.example.com
airsh login --proxy=airlock.example.com

# SSH-подключение к узлу
airsh ssh user@node

# airsh ssh принимает те же аргументы, что и OpenSSH:
airsh ssh -o ForwardAgent=yes user@node

# Можно создать символическую ссылку:
ln -s /path/to/airsh /path/to/ssh
ssh user@host

# Удаление сертификатов с локальной машины:
airsh logout

Airlock полностью совместим с существующими SSH-процессами: достаточно выполнять airsh login перед работой.

Установка airsh

Установите бинарный файл airsh той же мажорной версии, что и сервер Airlock в вашем кластере.

Чтобы узнать версию сервера:

  • В веб-интерфейсе выберите имя пользователя в правом верхнем углу → Help & Support. Версия кластера указана в разделе CLUSTER INFORMATION.
  • Через API:
curl https://airlock.example.com/webapi/find | jq '.server_version'

Идентификация пользователей

Идентичность пользователя в Airlock существует в рамках кластера. На узлах кластера могут быть разные пользователи ОС. Администратор Airlock назначает разрешённые логины каждой учётной записи.

При подключении к удалённому узлу нужно указать логин Airlock (флаг --user) и логин ОС в формате login@host:

# Аутентификация в кластере «work» как joe, вход на узел как root:
airsh ssh --proxy=work.example.com --user=joe root@node

Вход в кластер

Для получения сертификата выполните:

# Полная форма:
airsh login --proxy=proxy_host:<https_proxy_port>

# Порты по умолчанию:
airsh login --proxy=work.example.com

# Нестандартный HTTPS-порт:
airsh login --proxy=work.example.com:5000
ПортОписание
https_proxy_portHTTPS-порт прокси (по умолчанию 443 или 3080)

Команда login сохраняет сертификат в ~/.airsh и в ssh-agent, если он запущен. По умолчанию сертификаты действуют 12 часов.

Выполняйте airsh login перед другими командами — тогда флаг --proxy можно не указывать: airsh ssh user@host будет работать.

Кластер может поддерживать несколько источников идентификации. Для выбора коннектора используйте флаг --auth:

# Локальный пользователь admin:
airsh --proxy=proxy.example.com --auth=local --user=admin login

# SSO через GitHub (коннектор «github»):
airsh --proxy=proxy.example.com --auth=github login

При внешней аутентификации airsh открывает браузер. Чтобы подавить это поведение:

airsh login --proxy=work.example.com --browser=none

Ссылка для входа будет выведена в терминал — скопируйте её в браузер.

Просмотр сертификата

airsh status

# > Profile URL:  https://proxy.example.com:3080
#   Logged in as: johndoe
#   Cluster:      proxy.example.com
#   Roles:        access, auditor, editor
#   Logins:       root, admin, guest
#   Kubernetes:   enabled
#   Valid until:  2017-04-25 15:02:30 -0700 PDT [valid for 1h0m0s]
#   Extensions:   permit-agent-forwarding, permit-port-forwarding, permit-pty

Интеграция с SSH-agent

Если запущен ssh-agent, airsh login сохраняет сертификат в агенте. Проверка:

ssh-add -L

Чтобы отключить интеграцию с агентом, передайте --no-use-local-ssh-agent или установите AIRLOCK_USE_LOCAL_SSH_AGENT=false.

Файлы идентичности

# Сохранить сертификат в файл joe.pem:
airsh login --proxy=proxy.example.com --out=joe

# Использовать файл для входа:
airsh ssh --proxy=proxy.example.com -i joe joe@db

Для совместимости с OpenSSH добавьте --format=openssh — будут созданы файлы joe и joe-cert.pub.

SSH-доступ

Просмотр узлов

airsh ls

# Node Name     Address            Labels
# ---------     -------            ------
# turing        ⟵ Tunnel          os=linux
# graviton      10.1.0.7:3022      os=osx

# Фильтр по меткам:
airsh ls os=osx

Интерактивная оболочка

airsh ssh user@node
airsh ssh -p 6122 user@node ls
airsh ssh -o ForwardAgent=yes user@node

airsh ssh поддерживает флаги OpenSSH: -p, -l, -L, -A и другие.

Проброс портов

airsh ssh -L 5000:web.remote:80 node

Флаг --local выполняет локальную команду через туннель:

airsh ssh -L 5000:example.com:80 --local node curl http://localhost:5000

Jump host

airsh ssh -J proxy.example.com telenode

Поддерживается только один jump host; при -J user@proxy используется проброс портов вместо прокси Airlock.

Разрешение имён узлов

  • По IP-адресу или DNS.
  • По имени узла (nodename в конфигурации агента).
  • По меткам: airsh ssh os=osx (если узел один).

Копирование файлов

airsh scp example.txt root@node:/path/to/dest
scp -P 61122 -r files root@node:/path/to/dest

Airlock поддерживает протоколы SCP и SFTP.

Совместное использование сессий

На удалённом сервере выполните:

airlock status
# Session ID : 7645d523-60cb-436d-b732-99c5df14b7c4
# Session URL: https://work:3080/web/sessions/7645d523-...

Другой пользователь может присоединиться:

airsh join <session_ID>

Для присоединения к сессиям нужны специальные разрешения, настраиваемые администратором.

Доступ к Kubernetes

Список доступных кластеров:

airsh kube ls

# Kube Cluster Name Labels                      Selected
# ----------------- --------------------------- --------
# mycluster         env=dev

Вход в кластер:

airsh kube login mycluster
# Logged into kubernetes cluster "mycluster". Try 'kubectl version' to test the connection.

После airsh kube login обновляется kubeconfig. Далее используйте kubectl:

kubectl get pods

Флаги airsh kube login:

ФлагОписание
--allСгенерировать kubeconfig для всех доступных кластеров
--asKubernetes-пользователь для impersonation
--as-groupsKubernetes-группа для impersonation
--clusterИмя кластера Airlock (для листовых кластеров)
-n, --kube-namespaceNamespace по умолчанию

Доступ к базам данных

Список доступных баз данных:

airsh db ls

# Name                    Description  Allowed Users   Labels  Connect
# mysql-server1           ...          [alice]         env=dev airsh db connect mysql-server1

Прямое подключение через airsh

Для MySQL/MariaDB нужен клиент mysql:

airsh db connect --db-user=alice --db-name=airlock_example mysql-server1

Локальный туннель

Для графических клиентов или других СУБД создайте локальный туннель:

airsh proxy db mysql-db --db-user=alice --tunnel
# Started authenticated tunnel for the MySQL database "mysql-db" on 127.0.0.1:49415.

# Подключение:
mysql --port 49415 --host localhost --protocol TCP

С TLS-маршрутизацией:

airsh proxy db --port 10700 mysql-db
# Started DB proxy on 127.0.0.1:10700

Записи сессий

airsh recordings ls

airsh play <session-id>

Конфигурация airsh

Файлы конфигурации:

  • /etc/airsh.yaml — глобальная конфигурация (переопределяется через AIRLOCK_GLOBAL_AIRSH_CONFIG).
  • ~/.airsh/config/config.yaml — пользовательская конфигурация.

Пользовательская конфигурация имеет приоритет над глобальной.

Псевдонимы (aliases)

aliases:
    "l": "airsh login --auth=local"
    "status": "airsh status --format=json"

Дополнительные HTTP-заголовки

add_headers:
  - proxy: "*.example.com"
    headers:
      foo: bar

Доверенные кластеры

airsh --proxy=work clusters

# Cluster Name     Status
# staging          online
# production       offline

airsh --proxy=work ls --cluster=production
airsh --proxy=work ssh --cluster=production db-1

Дополнительные ресурсы