it-roy-ru.com

Как предотвратить, чтобы пароль для расшифровки закрытого ключа вводился каждый раз при использовании Git Bash в Windows?

У меня есть автоматическая служба сборки, которая загружает из закрытого репозитория git .. Проблема в том, что когда он пытается клонировать репозиторий, ему нужно предоставить пароль, потому что он не запоминается; так как нет человеческого взаимодействия, он всегда ждет пароль . Как я могу заставить его запомнить из id_rsa.pub?

121
D.Giunchi

Для пользователей Windows, просто обратите внимание, что именно так я настраиваю среду Git Bash для входа в систему один раз при запуске. Я редактирую мой ~/.bashrc:

 eval `ssh-agent` 
 ssh-add 

Поэтому, когда я запускаю Git Bash, это выглядит так:

 Добро пожаловать в Git (версия 1.7.8-preview20111206) 
 (И т.д.) 
 Agent pid 3376 
 Введите пароль для /c/Users/starmonkey/.ssh/id_dsa:
Identity добавлен: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

И теперь я могу SSH к другим серверам без входа в систему каждый раз.

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

248
starmonkey

В этом ответе объясняется, как получить имя пользователя и пароль GitHub для постоянного хранения, а не ключевую фразу ключа SSH.

В Windows просто запустите $ git config --global credential.helper wincred

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

Как и в http://www.tilcode.com/Push-github-without-entering-username-password-windows-git-bash/

61
Stephen Tun Aung

Я предпочитаю не вводить мою парольную фразу ssh при открытии новых терминалов; К сожалению, решение Starmonkey требует, чтобы пароль вводился в каждом сеансе. Вместо этого у меня есть это в моем .bash_profile:

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.

env=~/.ssh/agent.env

# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
}

agent_start() {
    (umask 077; ssh-agent >"$env")
    . "$env" >/dev/null
}

if ! agent_is_running; then
    agent_load_env
fi

# if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    agent_start
    ssh-add
Elif ! agent_has_keys; then
    ssh-add
fi

unset env

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

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

Обновление 07/01/2019: Я не думаю, что все это необходимо. Теперь я постоянно работаю, обеспечивая, что мой .bash_profile запускает ssh-agent:

eval $(ssh-agent)

Затем я настроил файл конфигурации ssh так:

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config

Надеюсь это поможет.

6
Conan

Если я правильно понимаю вопрос, вы уже используете авторизованный ключ SSH в сервисе сборки, но хотите избежать необходимости вводить фразу-пароль для каждого клона?

Я могу придумать два способа сделать это:

  1. Если ваша служба сборки запускается в интерактивном режиме: перед запуском службы сборки запустите ssh-agent с достаточно длительным таймаутом (опция -t). Затем используйте ssh-add (он должен быть у msysGit), чтобы добавить все необходимые закрытые ключи перед запуском службы сборки. Вам все равно придется вводить все парольные фразы, но только один раз за запуск службы.

  2. Если вы хотите вообще не вводить парольные фразы, вы всегда можете удалить парольные фразы из ключей ssh, как описано в https://serverfault.com/questions/50775/how-do-i-change- my-private-key-passphrase , установив пустую новую фразу-пароль. Это должно полностью устранить запрос на ввод пароля, но он еще менее безопасен, чем предыдущий вариант.

4
millimoose

Что сказал @starmonkey. Если вы не понимаете, что такое ~/.bashrc, проверьте ответ SO: Git для Windows: .bashrc или эквивалентные файлы конфигурации для Git Bash Shell

1
narak

Когда я пытаюсь нажать мой код, я получаю ошибку ниже:

$ git Push Origin dev

remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://[email protected]/xxxx/xxxx-api.git/': The requested URL returned error: 403

после нескольких часов исследований я обнаружил, что мне нужно использовать приведенную ниже команду 

$ git config --global credential.helper cache

после выполнения вышеуказанной команды я получил запрос на ввод имени пользователя и пароля в git hub. После предоставления правильных учетных данных я могу нажать мой код.

1
Naushad Qamar

Правильное решение:

  1. запустить терминал по умолчанию Windows - cmd и получить каталог вашего мастер-профиля 

echo %USERPROFILE%

  1. запустите GitBash в каталоге выше и создайте файл .bashrc с помощью команды

echo "" > .bashrc

  1. откройте файл .bashrc в вашем любимом текстовом редакторе и вставьте код из справки GitHub в этот файл
 env = ~/.ssh/agent.env 
...
 КОПИРОВАНИЕ ВСЕГО КОДА ОТ URL - Я не могу добавить его в stackoverflow, потому что он нарушает макет ... OMG! 
  1. перезапустите GitBash, и он попросит вас ввести пароль (только в первый раз), и все готово. Нет пароля снова.
0
Manic Depression