Как указать имя пользователя / пароль для git clone в скрипт, но не хранить учетные данные в .git / config

Я не уверен, какова проблема. Я думал, что сообщил о dtach:

dtach является программой, которая эмулирует функцию отсоединения экрана. Это разработано, чтобы быть прозрачным и ненавязчивым; это старается не интерпретировать ввод и вывод между приложенными терминалами и программой под ее управлением. Следовательно, это работает лучше всего с полноэкранными приложениями, такими как emacs.

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

Я использую все это время. Экран является излишеством для меня. Кажется, что это могло бы работать на Вас также.

Править: пример использования

Вот то, что я делаю для переключения. Это могло бы быть слишком много стычки для Вас. Хотя, возможно, Вы могли сделать некоторые псевдонимы в своем файле дистанционного управления удара. dtach работает с файлами сокета. Таким образом, сначала я:

# dtach -A firsttask bash

Затем запустите любую задачу в оболочке удара. Затем оставьте его этим dtach "сессия"

Ctrl-\

Запустите другую dtach сессию:

# dtach -A secondtask bash

Используя-A, а не-a создаст сокет, если он не будет существовать. Если это будет существовать, то это не выполнит указанную команду, просто соединится.

Таким образом, если Вы хотите набор с определенными задачами, которые Вы всегда делаете, как Вы описывают, это возможно. Псевдонимы Bash сделают это удобным. У Вас будет одно нажатие клавиши (Ctrl-\) для разъединения, и затем псевдоним для соединения. Так еще несколько нажатий клавиш, чем экран.

Вы могли сделать псевдоним для

alias log='dtach -A tailtask tail -f /var/log/messages'

в Вашем .bashrc файле и затем просто входит перфорация в 'журнале' и хите. Если Вы dtach, это продолжает бежать.

Я точно так же, как dtach, потому что это является маленьким и я думал, что было настолько здорово, как я могу соединиться с тем же сокетом дважды. Это означает, что я могу сделать, "онлайн" отклоняют обучение моим друзьям, которые хотят использовать "новую прохладную вещь человечности".:P Можно, вероятно, сделать что-то похожее с экраном, который я предполагаю.

31
задан 15 November 2016 в 17:35
5 ответов

Я использую метод git pull вместо клона. Скрипт будет выглядеть так:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

Это не сохранит ваше имя пользователя или пароль в .git / config . Однако, если не будут предприняты другие шаги, имя пользователя и пароль в виде открытого текста будут видны, пока процесс выполняется из команд, которые показывают текущие процессы (например, ps ).

Я бы сделал еще одно предложение (если вы не может использовать ssh) заключается в том, чтобы фактически использовать токен OAuth вместо имени пользователя / пароля в виде обычного текста, поскольку это немного более безопасно. Вы можете сгенерировать токен OAuth в настройках вашего профиля: https://github.com/settings/tokens .

Затем, используя этот токен, команда pull будет

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master
20
ответ дан 28 November 2019 в 19:57

После осмотра десятки из ТАК отправляют, блоги, и т.д., я испытал каждый метод, и это - то, что я придумал. Это покрывает ВСЕ.

См. Учетные данные Мерзавца & Частные пакеты Cheatsheet

Это все пути и инструменты, которыми можно надежно аутентифицировать мерзавца для клонирования репозитория без интерактивной подсказки пароля .

  • Открытые ключи SSH
    • маркеры доступа SSH_ASKPASS
  • API
    • [учетные данные] GIT_ASKPASS
    • .gitconfig insteadOf
    • .gitconfig
    • .git-учетные-данные
    • премия .netrc
  • : Работы с Частными Пакетами
    • узел / npm package.json
    • python / побеждает / яйца requirements.txt
    • рубиновые наилучшие варианты Gemfile
    • golang go.mod

драгоценных камней ни для какого устройства хранения данных простого текста

От того, что спрашивают здесь или Ключи SSH, GIT_ASKPASS, или git credential store, использование менеджера Keychain ОС могло бы быть лучшим выбором.

, Так как GIT_ASKPASS является, вероятно, наименее понятыми из этих 3, я детализирую это здесь - и другие находятся в cheatsheet.

GIT_ASKPASS

, Как создать GIT_ASKPASS сценарий:

echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass

, Как использовать его:

export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git

сценарий получает stdin в форме:

Password for 'scheme://host.tld':

сценарий принимает Мерзавца ENVs, такой как:

GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=
[еще 1134] детали в cheatsheet.

2
ответ дан 28 November 2019 в 19:57

Вы можете ввести свои права подключения в файле ~ / .netrc . Что-то вроде:

machine host.example.net
login bart
password eatmyshorts

Просто убедитесь, что изменили этот файл до 600. Если вы используете Windows, следующая ссылка может быть полезной: https://stackoverflow.com/questions/6031214/git- how-to-use-netrc-file-on-windows-to-save-user-and-password

Лично у меня есть тенденция использовать SSH-ключи для аутентификации (если вам, конечно, разрешено).

13
ответ дан 28 November 2019 в 19:57

IMO лучшее решение - использовать специальный помощник GIT_ASKPASS и передать пароль как другую переменную среды. Так, например, создайте файл git-askpass-helper.sh как:

#!/bin/sh
exec echo "$GIT_PASSWORD"

, а затем запустите git clone https: // username @ hostname / repo с переменными среды ] GIT_ASKPASS = / путь / к / git-askpass-helper.sh и GIT_PASSWORD = ядерные коды запуска .

Это имеет то преимущество, что пароль также не будет отображаться в списке процессов.

17
ответ дан 28 November 2019 в 19:57

Храните свой токен или пароль в безопасном месте, например проход.

Затем используйте скрипт bash для сопоставления git host с вашим хранилищем паролей, например:

#!/usr/bin/env bash
# assuming "get" action from git and a config like this
# git config --global credential.helper $XDG_BIN_HOME'/git_credentials_from_pass $@'
while IFS= read -r line
do
  echo "$line"
  if [[ "$line" =~ host=.*github.com.* ]]; then
      echo "username=your_user_name"
      echo "password=$(pass show token_github.com/your_username)"
  #else ...
  fi
done

Измените your_username и token_github.com так, как вы установили это вверх.

Источник.

0
ответ дан 6 August 2021 в 17:38

Теги

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