Bash скрипт для извлечения учетных данных переменной из другого файла, используя ". Filename" - PullRequest
1 голос
/ 16 января 2020

Запуск подсистемы Ubuntu 18.04 на Windows 10, но я также пытался сделать это на облачной виртуальной машине Google с Ubuntu 18.04.

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

Я обнаружил, что у меня должен быть файл, содержащий мои учетные данные, и поместил они «встроенные», когда я запускаю свой скрипт с помощью «. file», однако, когда я запускаю свой скрипт, он просто возвращает ошибку, что файл не найден.

Использование ls в каталоге, который я запускаю Скрипт содержит:

  • test. sh
  • учетные данные

"учетные данные" содержимого файла

USER=<username>
PWD=<password>

Текущий скрипт для теста. sh

#!/bin/bash

set -eu

DS=$(date "+%Y-%m-%d" -d "11 days ago")
DE=$(date "+%Y-%m-%d" -d "1 day ago")

. credential

rm -f cookiejar

curl  /dev/null -s -S -L -f -c cookiejar 'https://url/auth/authenticate' -d name=$USER -d passwd=$PWD

Сообщение об ошибке

+ set -eu
+ date +%Y-%m-%d -d 11 days ago
+ DS=2020-01-05
+ date +%Y-%m-%d -d 1 day ago
+ DE=2020-01-15
+ account=465
+ . credential test.sh: 9: .: credential: not found

Я пытался возиться с пробелами между строкой ". credential" в скрипте и пытался найти что я могу делать неправильно в Интернете, но не Можно правильно выполнить поиск в Google, чтобы найти соответствующий ответ.

Может ли кто-нибудь подтвердить, что я здесь упускаю / не знаю, или указать мне документацию, которая может помочь? Я впервые пытаюсь сделать что-то подобное, поэтому извиняюсь, если это базовый c вопрос.

Ответы [ 2 ]

1 голос
/ 16 января 2020

. использует поиск пути, чтобы найти файл, названный его аргументом. Поскольку текущий рабочий каталог обычно отсутствует в вашем PATH (и не должен), . не найдет файл. Вместо этого используйте

. ./credential

для обхода PATH поиска.

Однако это не совсем безопасно, потому что теперь вы можете запускать скрипт из соответствующего каталога. Либо поместите credential в каталог вашего PATH, либо используйте абсолютный путь, чтобы указать, где находится credential.

0 голосов
/ 19 января 2020

Использование ". ./Credential" решит ваши проблемы, как уже упоминали другие, или поместит его в каталог по вашему пути, чтобы его можно было найти глобально.

Если вы используете этот подход, вас может заинтересовать приведенный ниже скрипт (encpass. sh), который использует тот же подход и который был протестирован на переносимость в POSIX-совместимые оболочки. Он также шифрует учетные данные на диске и позволяет блокировать ключи и управлять своими секретами (учетными данными) по мере необходимости.

https://github.com/plyint/encpass.sh

...