echo '$ username \ n' |git clone url -v не работает - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь автоматизировать процесс, содержащий серию команд git.

Я хочу, чтобы скрипт оболочки работал с некоторыми интерактивными командами, такими как ввод имени пользователя и пароля в git clone url -v.Я проверил, что если я просто запущу git clone url -v, он покажет:

  1. клонирование в someRepo
  2. с запросом имени пользователя
  3. с запросом пароля

в таком порядке.Однако после некоторых исследований я попробовал следующие способы:

  1. echo -e 'username\n' | git clone url -v
  2. echo -e 'username\npassword\n' | git clone url -v
  3. git clone url -v <<< username\npassword\n
  4. (sleep 5;echo -e 'username\n' | git clone url -v)

, потому что я изначально думал, что первое сообщение cloning into repo займет некоторое время.Ни один из них не работает, но все они показывают то же сообщение, что Username for url:

Потратил много времени на это, я знаю, что

git clone https://$username:$password@enterpriseGithub.com/org/repo

работает, но этоиспользовать БЕЗОПАСНО, поскольку в журнале публикуются имя пользователя и пароль.

1 Ответ

0 голосов
/ 07 декабря 2018

Лучше было бы избежать аутентификации пользователя / пароля вообще (например, путем настройки аутентификации на основе агента, в идеале поддерживаемой личными ключами, хранящимися на физических токенах), или настроить хранилище учетных данных в предоставленном хранилище ключей.(и, мы надеемся, защищены) вашей операционной системой - но если вы просто хотите сохранить учетные данные вне командной строки, это можно сделать:

# Assume that we already know the credentials we want to store...
gitUsername="some"; gitPassword="values"

# Create a file containing the credentials readable only to the current user
mkdir -p "$HOME/.git-creds/https"
chmod 700 "$HOME/.git-creds"
cat >"$HOME/.git-creds/https/enterprise-github.com" <<EOF
username=$gitUsername
password=$gitPassword
EOF

# Generate a script that can retrieve stored credentials
mkdir -p -- "$HOME/bin"
cat >"$HOME/bin/git-retrieve-creds" <<'EOF'
#!/usr/bin/env bash
declare -A args=( )
while IFS= read -r line; do
  case $line in
    *..*) echo "ERROR: Invalid request" >&2; exit 1;;
    *=*)  args[${line%%=*}]=${line#*=} ;;
    '')   break ;;
  esac
done

[[ ${args[protocol]} && ${args[host]} ]] || {
  echo "Did not retrieve protocol and host" >&2; exit 1;
}
f="$HOME/.git-creds/${args[protocol]}/${args[host]}"
[[ -s $f ]] && cat -- "$f"
EOF
chmod +x "$HOME/bin/git-retrieve-creds"

# And configure git to use that 
git config --global credential.helper "$HOME/bin/git-retrieve-creds"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...