Облачная платформаEvolution

Настроить доступ по SSH в Container Apps

Эта статья полезна?

Вы можете включить доступ по

для всех контейнеров вашего проекта, кроме созданных из тестового образа.

Доступ по SSH позволит получать удаленный доступ к командной строке контейнера, смотреть логи контейнера, выполнять отладку и диагностику работы контейнера.

В Container Apps для доступа по SSH используется одна и та же пара ключей для всех контейнеров Container Services с поддержкой SSH-доступа, которые созданы одним пользователем в рамках одного проекта.

Подготовка Docker-образа для доступа по SSH

Чтобы Docker-образ был совместим с опцией Доступ по SSH, необходимо его подготовить.

Для поддержки доступа по SSH в Docker-образе:

  1. Установите openssh-server.

  2. Добавьте системного пользователя для подключения по SSH.

  3. Создайте конфигурационный файл для

    sshd_config.

  4. В конфигурационном файле для SSHD sshd_config укажите системного пользователя и путь к каталогу с публичными ключами etc/ssh/authorized_keys.

  5. Запустите в фоне OpenSSH Daemon.

  6. Запустите контейнерное приложение.

Пример готового образа с поддержкой SSH

Например, приложение Terminalio с включенным доступом по SSH.

Трафик приходит на фиксированный порт 2222, зарезервированный в сервисе Container Apps для SSH, и маршрутизируется в главный контейнер приложения. SSH-сервер в приложении слушает трафик на указанном в конфигурации порте. Порт, настроенный для прослушивания SSH-трафика, может совпадать с фиксированным портом 2222.

SSH-сервер, запущенный от лица системного пользователя, обращается к каталогу с публичными ключами с правами владельца каталога. Сервер использует публичный ключ для проверки подлинности приватного SSH-ключа клиента. При успешной аутентификации SSH-трафик в контейнер разрешен.

../_images/SSHAccess_CA.svg

Конфигурация контейнера:

  • Пользователь: jovyan. Системный пользователь для подключения по SSH.

  • Настраиваемый SSH-порт: 2222. Порт проброшен на порт хоста 2222. Этот порт используется для прослушивания SSH-трафика в главном контейнере.

  • Веб-порт: 8080. Порт проброшен на порт хоста 8080. Этот порт используется для HTTP-трафика в главном контейнере.

  • Пользователь, от имени которого запущен SSH-сервер, имеет доступ к локальному каталогу с публичными SSH-ключами.

  • В конфигурационном файле SSHD ../utils/sshd_config указан путь к каталогу с публичными ключами:

    AuthorizedKeysFile /etc/ssh/authorized_keys

При включении опции Доступ по SSH для контейнера в Container Apps укажите следующие значения:

  • Имя пользователяjovyan

  • Порт2222

  • Путь монтирования публичных SSH-ключей/etc/ssh/authorized_keys

../_images/SSH_access_enabled.webp

Значения настроек доступа по SSH в Container Apps соответствуют указанным в конфигурации приложения с поддержкой SSHD.

Включить и настроить доступ по SSH


  1. В личном кабинете перейдите на главную страницу сервиса Container Apps.

  2. Перейдите в раздел Container Services.

  3. Выберите нужный контейнер из списка.

    Примечание

    При включении доступа по SSH рекомендуется использовать контейнеры с горячим стартом. Запросы по SSH не вызывают создание экземпляра контейнера с «холодным» стартом.

  4. Перейдите на вкладку Доступ по SSH.

    Вкладка недоступна, если при создании контейнера был использован тестовый образ.

  5. Активируйте переключатель Доступ по SSH.

  6. Заполните следующие поля.

    Поле/Опция

    Описание

    Имя пользователя

    Пользователь с административным доступом к sudo.

    Порт

    Порт для подключения по SSH к SSH-серверу в контейнере. Порты 8008, 8012, 8013, 8112, 8022, 9090, 9091 зарезервированы сервисом и не могут использоваться. Если для контейнера включен привилегированный режим, зарезервированы также порты 1–1024.

    Значение по умолчанию: 2222.

    Должен совпадать со значением параметра Port, указанным в конфигурационном файле sshd_config вашего Docker-образа.

    Путь монтирования публичных SSH-ключей

    Путь монтирования папки с публичными SSH-ключами контейнера. При включении аутентификации через пару SSH-ключей укажите этот путь как место расположения публичных ключей.

    Значение по умолчанию: /etc/ssh/authorized_keys.

    Запрещено указывать следующие пути:

    '/', '/root', '/etc', '/bin', '/sbin', '/lib', '/dev', '/dev/tty', '/tmp', '/root', '/var', '/opt', '/home', '/usr', '/usr/bin', '/usr/sbin', '/usr/lib', '/usr/include', '/usr/share', '/usr/local'. Но их можно использовать как часть пути, например: '/usr/bin/somedir'.

    Путь должен совпадать со значением параметра AuthorizedKeysFile, указанным в конфигурационном файле sshd_config вашего Docker-образа.

    Внимание

    Если для контейнера примонтированы тома, значение поля Путь монтирования публичных SSH-ключей должно отличаться от пути, указанного в параметрах монтирования тома.

  7. Нажмите Сохранить.

В течение нескольких секунд для контейнера будет создана новая ревизия с поддержкой доступа по SSH.

Получить приватный SSH-ключ


  1. Перейдите в раздел Container Services.

  2. Выберите нужный контейнер из списка.

  3. Перейдите на вкладку Доступ по SSH.

  4. Нажмите Скачать приватный SSH-ключ.

    На ваше устройство будет загружен приватный SSH-ключ ssh_key.txt.

Подключиться к контейнеру по SSH

  1. Переименуйте скачанный приватный SSH-ключ:

    • если ключ скачан в личном кабинете, используйте команду:

      cat <your_key> > priv_key
    • если ключ получен по API, используйте команду:

      echo <your_key> > priv_key

    Где <your_key> — скачанный файл ssh_key.txt или текст приватного ключа, полученный через API.

  2. Поменяйте права доступа для скачанного приватного SSH-ключа.

    chmod 600 priv_key
  3. Подключитесь к контейнеру по названию контейнера:

    ssh -i priv_key <container_name>.<project_id>@ssh.containers.cloud.ru -p 2222

Где:

  • <container_name> — название контейнера.

  • <project_id> — идентификатор проекта, в котором размещен контейнер.

Примечание

Порт, указанный в строке подключения, статичен и не меняется в зависимости от порта, настроенного для опции Доступ по SSH в поле Порт. Значения полей в строке подключения и в поле Порт могут совпадать.

Отключить доступ по SSH

  1. В личном кабинете перейдите на главную страницу сервиса Container Apps.

  2. Перейдите в раздел Container Services.

  3. Выберите нужный контейнер из списка.

  4. Перейдите на вкладку Доступ по SSH.

  5. Выключите опцию Доступ по SSH.

  6. Нажмите Сохранить.

    Доступ к контейнеру по SSH отключен. Все активные подключения по SSH к контейнерам с включенным SSH-доступом будут разорваны.

    Для активных подключений в терминале отобразится сообщение:

    Connection to ssh.containers.cloud.ru closed.