###### tags: Linux, bash, Wireguard. # Автоматизируйте работу с Wireguard. Напишите скрипт который будет создавать клиентские конфиги И так для начала определимся что должен делать скрипт. Во первых желательно создавать папки для каждого клиента с файлом конфигурации и ключами, называть папки желательно по какому-то индификатору клиента, поэтому у нас уже есть один параметр который принимает скрипт: `$1` - имя или идентификатор клиента. Скрипт должен создавать конфиги клиента, а также дописывать конфиг сервера. При этом для каждого клиента, после каждого использования скрипта должен назначаться не занятый IP адресс в VPN сети. Ну и после всех действий должны выполняться перезагрузка службы wg. В конфиге сервера перед добавлением пира подписывайте коментом индификатор клиента из параметра `$1` ![](https://i.imgur.com/HQJDKFo.png) Скрипт для создания клиентов должен лежать в `/etc/wireguard/script` директории. Напишите скрипт который разворачивает Wireguard сервер на Linux с нуля и протестируйте его.(PS:пожауйста не используйте уже готовые скрипты а напишите свой это полезная тренеровка.) Данный скрипт должен принимать все неообходимые параметры для создания конфига из файла или при запуске программы. Скрипт должен создавать два дополнительных каталога `client` и `script` в директории `/etc/wireguard` и в папку script закидывать ваш скрипт для создания конфигов клиента. ## Что нужно знать для выполнения задания. Что нужно знать. 1. В сприте bash вы можете использовать все команды которые у вас работают в Linux. 2. Вы можете использовать переменные как и в любых языках программирования. 3. Вы можете использовать условия и циклы. 4. Вы можете создавать функции. 5. И тд. ### Bash. Для начала, большинство необходимых вам команд вы можете взять из гайда: [Настройка Wireguard](https://hackmd.io/@erikguru/HkQWSI8Eo). Используйте в начале файла со скриптом чтобы указать где лежит bash-интерпретатор. ```bash #!/bin/bash ``` **Для создания переменных используйте четкие и понятные названия:** ```bash privatekey_url="/etc/wireguard/privatekey" ``` Обратите внимание что между `=` нету пробелов. Чтобы записать содержимое какого либо файла в переменную вы можете использовать следующию конструкцию: ```bash privatekey=$(<$privatekey_url) ``` Для обращение к переменной и вставки ее значения в какую либо команду используйте знак `$`. Чтобы записать какой либо текст в файл используйте операторы перенапрваления: ```bash echo "#Пользователь: $1" >> wg0.conf ``` > Внимание используя `>` вы замените все содержимое файла на вставляемый текст, используя `>>` вы запишите текст в конец файла не удаляя его содержимого. Обратите внимание на `$1` такая запись используеться для обращения к первому аргументу после запуска скрипта. К примеру командой: `script.sh erik` вы передадите в скрипт в переменную `1` значение erik. Соответсвтенно `$2 ` передадите 2 аргумент после запуска скрипта и тд. Если вы не хотите чтобы скрипт выводил какие либо ошибки или либой другой ввывод после выполнения команды добавьте знак `&` ```bash systemctl restart wg-quick@wg0 & ``` В таком случае команда выполниться в фоне. Впринципе этого достаточно чтобы написать скрипт. В остольном гугл в помощь к примеру: [Руководство по написанию Bash скриптов](https://selectel.ru/blog/tutorials/linux-bash-scripting-guide/).