Рубрики
Uncategorized

Подключиться к VPN внутри трубопровода (CI / CD)

Для многочисленных причин некоторые серверы защищены VPN, но не следует удерживать вас от USIN … Теги с DevOps, трубопроводом, CICD, CIRCLECI.

Для многочисленных причин некоторые серверы защищены VPN, но он не должен удерживать вас от использования CI/CD. В этом руководстве (ака мой первый), я опишу, как подключиться к вашему VPN в вашем трубопроводе. Давайте начнем!

Всегда предлагается поместить ваши файлы трубопровода внутри одной папки, чтобы все могли чистить. Это структура файлов для CIRCLECI с использованием ForgiTient VPN.

├── .circleci
      └── config.yml  
      └── forti-vpn.sh
      └── forticlient-sslvpn_4.4.2333-1_amd64.deb 

Я предлагаю вам поместить большую часть ваших файлов, необходимых внутри папки .Circleci, так как это может удерживать структуру очистить и поместить все ваши файлы трубопроводов вдали от вашего кода. «Root» вашего репо внутри машины:

/home/$ circle_project_reponame/

Я погрузиюсь в два сжигающих файла позже в этом посте.

Это на самом деле проще, чем вы могли бы подумать. Инструмент сборки (Circleci, Jenkins, Azure, Workflow GitHub, ..) На самом деле просто использует по умолчанию Docker Images (читать далее) . Обычно инструмент автоматизации сборки имеет несколько агентов (контейнеров Linux). Но так как нам нужен специальный Драйверы Tun/Tap Нам понадобится раскрутить на себя Linux VM.

Не волнуйтесь, вам не нужно ничего особенного для этого, всего 1 строку кода в верхней части вашего config.yml Отказ

version: 2.1
jobs:
    build:
        machine:
            image: ubuntu-1604:201903-01

Машинная линия позволяет инструменту раскрутить определенную машину Linux, поскольку в стандартных, драйвер Tun/Tap отключен по умолчанию.

FortiClient

Переменные среды

Добавьте свой хост FortiClient (с портом), именем пользователя и пароль в качестве переменных среды в пользовательском интерфейсе CIRCLECI

  • Forti_Host Имя хоста: порт
  • Forti_user FortiClient Имя пользователя
  • Forti_Password FortiClient Password

Установите FortiClient

На момент написания я не смог установить FortiClient внутри CMD с помощью команды curl или иным образом, поэтому я просто пропускаю установочный файл внутри .circleci папка. Вы можете скачать файл из здесь Отказ На Azure следующие CMD работал:

sudo wget https://hadler.me/files/forticlient-sslvpn_4.4.2333-1_amd64.deb

Теперь у нас есть установщик, но нам все еще нужно создать шаг, который устанавливает инструмент внутри нашего Linux.

- run:
name: Install FortiClient
command: |
    mkdir -p /home/$CIRCLE_PROJECT_REPONAME/vpn/tmp
    cd /home/$CIRCLE_PROJECT_REPONAME/vpn
    sudo apt-get update
    echo "Install Expect"
    sudo apt-get install expect
    echo "Install PPP"
    sudo apt-get install ppp expect
    echo "Install FortiClient"

    sudo cp  ~/.circleci/forticlient-sslvpn_4.4.2333-1_amd64.deb .
    sudo dpkg -x forticlient-sslvpn_4.4.2333-1_amd64.deb /home/$CIRCLE_PROJECT_REPONAME/vpn

    sudo truncate -s 0 opt/forticlient-sslvpn/64bit/helper/License.txt
    sudo ./opt/forticlient-sslvpn/64bit/helper/setup >/dev/null < <(echo y)

* Вам не нужно ничего менять в этом сценаре.

Подключиться к VPN

Вам нужно только предоставить свои учетные данные в качестве переменных среды. Создайте этот файл и вставьте следующие Сценарий (или вы можете получить этот файл)

Затем добавьте шаг для подключения к VPN с помощью скрипта.

    sudo wget https://gist.githubusercontent.com/buelenw/0887937a8cffaca9c9ec84c8b4c47a06/raw/a8575708e860b33f5f51ae834ee64558d1a57d14/forti-vpn.sh
    sudo sed -i s/""/$FORTI_HOST/ forti-vpn.sh
    sudo sed -i s/""/$FORTI_USER/ forti-vpn.sh
    sudo sed -i s/""/$FORTI_PASSWORD/ forti-vpn.sh
    sudo chown root:root forti-vpn.sh
    sudo chmod 600 forti-vpn.sh
    sudo chmod +x forti-vpn.sh
    nohup sudo ./forti-vpn.sh &     
    sleep 10

    HOST=$SERVER
    ip=${HOST%%:*}
    ping -c 1 $ip ;  echo $?

* Команда SED поместит ваши учетные данные в сценарий входа в систему

Сон необходим для подключения VPN для установления После сна есть чек, который закрепляет сервер и возвращает 1, если сервер недоступен. Это автоматически остановит рабочий процесс Circleci.

Убедитесь, что убить VPN-соединение в конце вашей работы

sudo pkill forti

Это руководство работает с Forti-Client, но я уверен, что это то же решение для всех других VPN-клиентов (например, Cisco-Anyconnect и OpenVPN. Он был протестирован как на оба circleci & Azure Devops.

https://discuss.circleci.com/t/vpn-connection-from-build-machine/4033 https://confluence.jaytaaala.com/display/tkb/connousuresefereperepereperepereake и+automated+VPN5CONNUCTICEECT+With+Forticlient+%28Cli+Only%29 USSINGESINGELIPHASHELED и+EXPECT+Scripting https://serverfault.com/questions/412220/fortinet-ssl-vpn-client-stup-without-gui-gri-linux-centos/484988#484988 rueweg=9F12134C83234E27B36 https://gist.github.com/PieterScheffers/20583b65ef171cf94db16e6c659498f3

Оригинал: «https://dev.to/woutb/connect-to-vpn-inside-a-pipeline-ci-cd-53d8»