Как предотвратить, чтобы пароль для расшифровки закрытого ключа вводился каждый раз при использовании Git Bash в Windows?
У меня есть автоматическая служба сборки, которая загружается из частного репозитория git. Проблема в том, что когда он пытается клонировать репозиторий, ему нужно предоставить пароль, потому что он не запоминается; поэтому, потому что нет человеческого взаимодействия, он всегда ждет пароль. Как я могу заставить его вспомнить из id_rsa.pub?
8 ответов
Для пользователей Windows, просто обратите внимание, что именно так я настраиваю среду Git Bash, чтобы один раз войти в систему при запуске. Я редактирую мой ~ /.bashrc:
eval `ssh-agent` SSH-добавить
Поэтому, когда я запускаю Git Bash, это выглядит так:
Добро пожаловать в Git (версия 1.7.8-preview20111206) (так далее) Агент Пид 3376 Введите кодовую фразу для /c/Users/starmonkey/.ssh/id_dsa: Добавлена идентификация: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)
И теперь я могу ssh к другим серверам без входа в систему каждый раз.
Я знаю, что это старый вопрос, но я пришел сюда сегодня из поиска в Google, поэтому я надеюсь, что это будет полезно для других.
В этом ответе объясняется, как получить имя пользователя и пароль GitHub для постоянного хранения, а не ключевую фразу ключа SSH.
В windows просто беги $ git config --global credential.helper wincred
Это означает, что при следующем нажатии вы будете вводить свое имя пользователя и пароль, как обычно, но они будут сохранены в учетных данных Windows. Вам не нужно будет вводить их снова, после этого.
Например, http://www.tilcode.com/push-github-without-entering-username-password-windows-git-bash/
Я предпочитаю не вводить мою парольную фразу 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
Это запомнит мою фразу-пароль для новых сеансов терминала; Я должен ввести его только один раз, когда я открываю свой первый терминал после загрузки.
Я хотел бы отметить, где я получил это, это модификация чужой работы, но я не могу вспомнить, откуда она взялась. Спасибо анониму автору!
Если я правильно понимаю вопрос, вы уже используете авторизованный ключ SSH в сервисе сборки, но хотите избежать необходимости вводить фразу-пароль для каждого клона?
Я могу придумать два способа сделать это:
Если ваша служба сборки запускается в интерактивном режиме: прежде чем запускать службу сборки, запустите
ssh-agent
с достаточно длительным таймаутом (-t
опция). Тогда используйтеssh-add
(msysGit должен иметь их), чтобы добавить все закрытые ключи, которые вам нужны, перед запуском службы сборки. Вам все равно придется вводить все парольные фразы, но только один раз за запуск службы.Если вы хотите вообще не вводить парольные фразы, вы всегда можете удалить парольные фразы из ключей ssh, как описано в https://serverfault.com/questions/50775/how-do-i-change-my-private-key-passphrase, установив пустую новую фразу-пароль. Это должно полностью устранить запрос на ввод пароля, но он еще менее безопасен, чем предыдущий вариант.
Когда я пытаюсь нажать мой код, я получаю ошибку ниже:
$ git push origin dev
remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403
после нескольких часов исследований я обнаружил, что мне нужно использовать приведенную ниже команду
$ git config --global credential.helper cache
после выполнения вышеупомянутой команды я получил приглашение ввести имя пользователя и пароль в git hub. После предоставления правильных учетных данных я могу нажать свой код.
Что сказал @starmonkey. Если вы не понимаете, что такое ~/.bashrc, проверьте ответ SO: Git для Windows: .bashrc или эквивалентные файлы конфигурации для оболочки Git Bash
Правильное решение:
- запустить терминал по умолчанию Windows - cmd и получить каталог вашего мастер-профиля
echo %USERPROFILE%
- запустите GitBash в каталоге выше и создайте файл.bashrc с помощью команды
echo "" > .bashrc
- откройте файл.bashrc в вашем любимом текстовом редакторе и вставьте в него файл справки GitHub.
ENV =~/.ssh/agent.env ... КОПИРОВАНИЕ ВСЕГО КОДА ОТ URL - Я не могу добавить его в stackru, потому что он нарушает макет... О Боже!
- перезапустите GitBash, и он попросит вас ввести пароль (только в первый раз) и все готово. Нет пароля снова.
Вам нужно создать authorized_keys
файл под .ssh
папка пользователя, под которой вы собираетесь подключиться к серверу репо. Например, если вы используете имя пользователя buildservice
на repo.server
Вы можете запустить:
cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
Чем вы должны проверить следующие вещи:
Соответствующий закрытый ключ id_rsa представлен в
builservice@build.server:~/.shh/id_rsa
,Этот отпечаток сервера repo.server хранится в
buildservice@build.server:~/.ssh/known_hosts
файл. Как правило, это будет сделано после первой попыткиssh
подключиться кrepo.server
,