У меня есть служба автоматической сборки, которая загружается из частного репозитория git. Проблема в том, что когда он пытается клонировать репозиторий, ему нужно указать пароль, потому что он не запоминается; поэтому, поскольку нет человеческого взаимодействия, он вечно ждет пароль. Как я могу заставить его вспомнить из id_rsa.pub?
Как предотвратить необходимость ввода пароля для расшифровки закрытого ключа каждый раз при использовании Git Bash в Windows?
Ответы (7)
Для пользователей 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 без входа в систему каждый раз.
.bashrc
.
- person Ry-♦; 26.01.2012
eval $(ssh-agent)
.
- person clash; 27.01.2014
ssh-add ~/.ssh/myfile_rsa
- person Syntax Error; 30.06.2015
ssh-add /<drive_letter>/path/to/mykey_rsa
.
- person gligoran; 13.10.2015
eval $('ssh-agent')
, затем ssh-add
, затем дал ему свой пароль, и теперь меня больше не спрашивают мой пароль.
- person Rockin4Life33; 14.05.2016
copy > ~/.bashrc
в git bash для создания файла bashrc в Windows, игнорируйте ошибку
- person Ruben; 30.05.2017
bash.bashrc
в каталоге установки - в моем случае C:\Program Files\Git\etc\bash.bashrc
- person Dimitar Ivanov; 23.08.2018
В этом ответе объясняется, как сохранить постоянное имя пользователя и пароль GitHub, а не кодовую фразу ключа SSH.
В Windows просто запустите
$ git config --global credential.helper wincred
Это означает, что при следующем нажатии вы будете вводить свое имя пользователя и пароль, как обычно, но они будут сохранены в учетных данных Windows. После этого вам не придется вводить их снова.
Например, Отправить на GitHub без ввода имени пользователя и пароля каждый раз (Git Bash в Windows).
git
изменит свое поведение в соответствии с набором директив конфигурации.
- person starbeamrainbowlabs; 31.07.2017
Я предпочитаю не вводить свою парольную фразу 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
Это также запомнит мою парольную фразу для новых сеансов терминала; Мне нужно ввести его только один раз, когда я открываю свой первый терминал после загрузки.
Я хотел бы отметить, откуда я это взял; это модификация чьей-то работы, но я не могу вспомнить, откуда она взялась. Спасибо анонимному автору!
Обновление 2019-07-01: я не думаю, что все это необходимо. Теперь я постоянно работаю, гарантируя, что мой файл .bash_profile
запускает ssh-agent:
eval $(ssh-agent)
Затем я настроил файл конфигурации ssh
следующим образом:
touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config
Если я правильно понимаю вопрос, вы уже используете авторизованный 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://[email protected]/xxxx/xxxx-api.git/': The requested URL returned error: 403
После нескольких часов исследований я обнаружил, что мне нужно использовать следующую команду:
$ git config --global credential.helper cache
После выполнения вышеуказанной команды я получил запрос на ввод имени пользователя и пароля GitHub. После предоставления правильных учетных данных я могу отправить свой код.
Правильное решение:
Запустите терминал Windows по умолчанию — cmd и получите каталог вашего главного профиля.
echo %USERPROFILE%
Запустите Git Bash в указанном выше каталоге и создайте файл
.bashrc
с помощью командыecho "" > .bashrc
Откройте файл
.bashrc
в своем любимом текстовом редакторе и вставьте код из справки GitHub в этот файл:env=~/.ssh/agent.env ... COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
Перезапустите Git Bash, он запросит ваш пароль (только в первый раз) и готово. Пароль снова не беспокоит.
Вам необходимо создать файл authorized_keys
в папке .ssh
пользователя, под которым вы собираетесь подключаться к серверу репозитория. Например, если вы используете имя пользователя buildservice
на 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
.
cat id_rsa.pub > .ssh/authorized_keys
перезапишет все существующие авторизованные ключи. Используйте >>
для добавления вместо перезаписи.
- person David Pärsson; 23.10.2016