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

$ set -f             # disable globbing
$ arr=($(<file.csv))
$ set +f             # enable globbing
$ declare -p arr     # print array content
declare -a arr=([0]="UserName" [1]="UserName" [2]="UserName")
  • arr=(…)создать массив
  • $(<file.csv)прочитать файлfile.csv(как$(cat file.csv))

Перед чтением файла необходимо отключить подстановку, чтобы предотвратить расширение имен пользователей такими символами, как *или ?или специальными шаблонами (расширение имени пути ).

Элементы разделяются символами новой строки, пробела или табуляции (при условии, что $IFSне были изменены )и не обрезаны.

0
18.10.2021, 03:28
1 ответ

Прочитайте файл JSON локально, а затем установите соединение SSH. Кроме того, больше не требуется, чтобы jqбыл доступен в удаленной системе.

Ваш скрипт:

#!/bin/sh

set -u -e

wget 'https://raw.githubusercontent.com/dokku/dokku/v0.25.7/bootstrap.sh'

sudo DOKKU_TAG=v0.25.7 bash bootstrap.sh
sudo dokku plugin:install 'https://github.com/dokku/dokku-postgres.git' postgres

dokku postgres:create "$DB_NAME"
dokku postgres:link "$DB_NAME" "$APP_NAME"

# use the Backup IAM profile
dokku postgres:backup-auth \
    "$DB_NAME" \
    "$AWS_BACKUP_ACCESS" \
    "$AWS_BACKUP_SECRET" \
    "$AWS_DEFAULT_REGION"

Запуск:

ssh root@remotehost "env $( jq -r 'to_entries | map("\(.key)=\(.value)") | @sh' /home/project/env.json ) sh -s" <dokku.sh

Это вызывает envв удаленной системе со списком переменных среды и их значениями в качестве аргументов. В конце списка аргументов находится sh -s, который прочитает ваш dokku.shскрипт и выполнит его (скрипт не использует башизмы, поэтому нет необходимости вызывать более продвинутую оболочку ).

Я также использую set -uв скрипте, чтобы он завершал работу при обнаружении неустановленной переменной, и set -eдля завершения при любой ошибке.

Очевидно, вы могли бы обернуть бит вызоваssh-в локальный сценарий или использовать что-то вроде Ansible, чтобы сделать все это более надежно.

1
18.10.2021, 09:49

Теги

Похожие вопросы