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

110

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

Теги:
passwords
ssh-keys

8 ответов

221

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

eval `ssh-agent`
ssh-add

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

Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

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

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

  • 0
    Это :) Спасибо. Не знал о .bashrc .
  • 9
    Если у вас нет файла ~ / .bashrc, просто создайте новый текстовый файл (блокнот или другой редактор) и добавьте две строки, упомянутые starmonkey.
Показать ещё 11 комментариев
58

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

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

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

Как и в случае, http://www.tilcode.com/push-github-without-entering-username-password-windows-git-bash/

  • 7
    Это не сработало для меня.
  • 2
    после этой команды вам нужно ввести имя пользователя и пароль.
Показать ещё 4 комментария
4

Я предпочитаю не вводить свою кодовую фразу 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 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

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

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

  • 0
    Меня все еще спрашивают о моей парольной фразе каждый раз.
  • 1
    @ Райан, надеюсь, только что добавленное мной обновление решит вашу проблему. Я постоянно обновляю информацию в сообщении в блоге на conan.is/blogging/clojure-on-windows.html , и я сам задавал тот же вопрос на stackoverflow.com/questions/52423626/…
Показать ещё 2 комментария
4

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

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

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

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

  • 0
    Спасибо за второй вариант, мне это было нужно.
1

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

$ 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

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

  • 0
    Это только что сгенерированное "git: 'credential-cache' не является командой git". Однако "git config --global credential.helper store" сработал - это может быть не самым лучшим, но я вынужден использовать HTTPS, а не мой предпочитаемый SSH и просто хочу, чтобы он работал.
1

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

0

вам нужно выполнить команду ниже в git bash. После выполнения попытки повторить клонирование на этот раз git bash отобразит всплывающее окно для имени пользователя и пароля.

(git config --global credential.helper wincred)

-2

Вам нужно создать файл authorized_keys в папке .ssh пользователя, под которым вы собираетесь подключиться к серверу репо. Например, если вы используете имя пользователя buildservice on repo.server, вы можете запустить:

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys

Чем вы должны проверить следующее:

  • Соответствующий закрытый ключ id_rsa представлен в [email protected]:~/.shh/id_rsa.

  • Этот отпечаток repo.server хранится в файле [email protected]:~/.ssh/known_hosts. Обычно это будет сделано после первой попытки ssh подключиться к repo.server.

  • 0
    Я забыл сказать. Под Windows ваш домашний каталог, вероятно, будет C: \ Users \ Username
  • 5
    Ммм .. У Git Bash есть все, прочитайте более внимательно название вопроса. Также из вопроса я предположил, что пара ключей уже сгенерирована (потому что его спросили, как заставить сервер репо запомнить id_rsa.pub.) Извините за форматирование.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню