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

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

Ответы [ 7 ]

251 голосов
/ 26 января 2012

Для пользователей 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)

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

61 голосов
/ 07 декабря 2015

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

В Windows просто запустите

$ git config --global credential.helper wincred

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

Как и в случае, Push на GitHub без ввода имени пользователя и пароля каждый раз (Git Bash в Windows) .

6 голосов
/ 02 ноября 2016

Я предпочитаю не вводить мою фразу-пароль 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
4 голосов
/ 15 мая 2011

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

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

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

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

1 голос
/ 02 апреля 2017

Когда я попытался отправить свой код, я получил следующую ошибку:

$ 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

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

0 голосов
/ 22 июля 2018

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

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

    echo %USERPROFILE%
    
  2. Запустите Git Bash в указанном выше каталоге и создайте файл .bashrc с помощью команды

    echo "" > .bashrc
    
  3. Откройте файл .bashrc в своем любимом текстовом редакторе и вставьте код из справки GitHub в этот файл:

    env=~/.ssh/agent.env
    ...
    COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
    
  4. Перезапустите Git Bash, и он попросит вас ввести пароль (только в первый раз), и все готово. Нет пароля снова.

0 голосов
/ 20 апреля 2011

Вам необходимо создать файл 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.

...