Настройка Git через SSH для входа один раз
я клонировал свой репозиторий git через ssh. Таким образом, каждый раз, когда я общаюсь с мастером origin, нажимая или вытягивая, я должен повторно ввести свой пароль. Как я могу настроить git так, чтобы мне не нужно было вводить свой пароль несколько раз?
14 ответов:
попробовать
ssh-addнеобходимоssh-agentчтобы работать и держать свой закрытый ключ(ОК, отвечая на обновленный вопрос, вы сначала запустите
ssh-keygenдля создания открытого и закрытого ключа как Jefromiобъяснил. Вы помещаете открытый ключ на сервер. Вы должны использовать парольную фразу, Если у вас нет эквивалента простого текстового пароля в вашем закрытом ключе. Но когда вы это сделаете, то вам нужно на практикеssh-agentКак пояснил под.)вы хотите работать
ssh-agentв фоновом режиме при входе в систему. После входа в систему, идея состоит в том, чтобы запуститьssh-addодин и только один раз, чтобы дать агенту свою парольную фразу, чтобы декодировать ваш ключ. Затем агент просто сидит в памяти с вашим ключом разблокирован и загружен, готов к использованию каждый раз, когда вы ssh где-то.все команды ssh-family1 затем проконсультируется с агентом и автоматически сможет использовать ваш закрытый ключ.
On OSX (err, macOS), системы GNOME и KDE,
ssh-agentобычно запускается автоматически для вас. Я пройдусь по деталям, если, как и я, у вас также есть Cygwin или другая среда windows, где это, безусловно, не делается для вас.Начало здесь:
man ssh-agent.существуют различные способы автоматического запуска агента. Как объясняется на справочной странице, вы можете запустить его так, чтобы он был родителем всех других процессов вашего сеанса входа в систему. Таким образом, переменные среды, которые он предоставляет, автоматически будут во всех ваших оболочках. Когда вы (позже) вызываете
ssh-addилиsshоба будут иметь доступ к агенту, потому что все они имеют переменные среды с магическими именами сокетов или что-то еще.кроме того, вы можете запустить агент как обычный дочерний элемент, сохранить параметры среды в файле и отправить этот файл в каждую оболочку при ее запуске.
мои системы OSX и Ubuntu автоматически запускают агент настройка, так что все, что мне нужно сделать, это запустить
ssh-addраз. Попробуйте запуститьssh-addи посмотреть, если это работает, если да, то вам просто нужно сделать это один раз за перезагрузку.моей системе Cygwin это нужно было сделать вручную, поэтому я сделал это в своем
.profileи.bashrcисточник.profile:. .agent > /dev/null ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || { ssh-agent > .agent . .agent > /dev/null }The
.agentфайл создается автоматически скриптом; он содержит определения и экспорт переменных окружения. Выше пытается источник .файл агента, а затем пытаетсяps(1)агент. Если он не работает, он запускает агент и создает новый файл агента. Вы также можете просто запуститьssh-addи если это не удается запустить агент.
1. И даже локальные и удаленныеsudoС правильным расширением pam.
была аналогичная проблема с GitHub, потому что я использовал протокол HTTPS. Чтобы проверить, какой протокол вы используете, просто запустите
git config -lи посмотрите на строку, начинающуюся с
remote.origin.url. Для переключения протоколаgit config remote.origin.url [email protected]:your_username/your_project.git
речь идет о настройке ssh, а не git. Если вы еще этого не сделали, вы должны использовать
ssh-keygen(пустой пароль) для создания пары ключей. Затем вы копируете открытый ключ в удаленное место назначения с помощьюssh-copy-id. Если у вас нет необходимости в нескольких ключах (например, более безопасный с парольной фразой для других целей) или у вас есть какие-то действительно странные вещи с несколькими идентификаторами, это просто:ssh-keygen # enter a few times to accept defaults ssh-copy-id -i ~/.ssh/id_rsa user@hostизменить: Вы действительно должны просто прочитать ответ DigitalRoss, но: если вы используете ключи с паролями, вам нужно будет использовать
ssh-add <key-file>, чтобы добавить их кssh-agent(и, очевидно, стартssh-agentесли ваш дистрибутив не работает для вас).
убедитесь, что при клонировании репозитория вы сделали это с помощью URL-адреса SSH, а не HTTPS; в поле клонировать URL-адрес РЕПО выберите протокол SSH перед копированием URL-адреса. См. изображение ниже:
расширение мыслей Muein для тех, кто предпочитает редактировать файлы непосредственно над запуском команд в git-bash или terminal.
перейти на .каталог git вашего проекта (корень проекта на вашем локальном компьютере) и откройте файл "config". Затем найдите [remote "origin"] и установите конфигурацию url следующим образом:
[remote "origin"] #the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc. url = [email protected]:<username>/<projectname>.git
Я думаю, что здесь есть две разные вещи. Первый из них заключается в том, что обычная аутентификация SSH требует от пользователя ввода пароля учетной записи (где пароль учетной записи будет аутентифицироваться различными методами, в зависимости от конфигурации sshd).
вы можете избежать ввода этого пароля с помощью сертификатов. С сертификатами вам все равно нужно поставить пароль, но на этот раз это пароль вашего закрытого ключа (это не зависит от учетной записи пароль.)
для этого вы можете следовать инструкциям, указанным steveth45:
Если вы хотите избежать ввода пароля сертификата каждый раз, то вы можете использовать ssh-агент, как указано DigitalRoss
точный способ, которым вы это делаете, зависит от Unix vs Windows, но по существу вам нужно запустить ssh-агент в фоновом режиме при входе в систему, а затем при первом входе в систему запустите ssh-add, чтобы дать агенту свой пароль. Все команды ssh-family затем проконсультируются с агентом и автоматически подберут вашу парольную фразу.
начните здесь: man ssh-agent.
единственная проблема ssh-агента заключается в том, что на *nix, по крайней мере, вы должны поставить пароль сертификатов на каждую новую оболочку. А затем сертификат "загружается", и вы можете использовать его для аутентификации на сервере ssh без ввода какого-либо пароля. Но это на этой конкретной оболочке.
с брелок вы можете сделать то же самое, что и ssh-агент, но "общесистемный". После включения компьютера вы открываете оболочку и вводите пароль сертификата. И тогда каждая другая оболочка будет использовать этот" загруженный " сертификат, и ваш пароль никогда не будет запрошен снова, пока вы не перезагрузите компьютер.
Gnome имеет аналогичное приложение, называемое Брелок Гном который запрашивает пароль вашего сертификата первый раз, когда вы используете его, а затем он хранит его надежно, так что вы не будете просить снова.
Если вы используете github, а у них есть очень хороший учебник, который объясняет это более четко (по крайней мере для меня).
Если вы клонировали с помощью HTTPS (рекомендуется), то:-
git config --global credential.helper cacheа то
git config --global credential.helper 'cache --timeout=2592000'
timeout=2592000 (30 дней в секундах), чтобы включить кэширование в течение 30 дней (или все, что вам подходит).
теперь запустите простую команду git, которая требует вашего имени пользователя и пароля.
введите свои учетные данные один раз и теперь кэширование в течение 30 дней.
снова попробовать с любой командой git и теперь вам не нужны никакие полномочия.
для получения дополнительной информации :- кэширование пароля GitHub в Git
Примечание:вам нужен Git 1.7.10 или новее, чтобы использовать помощник по учетным данным. При перезагрузке системы, мы, возможно, придется ввести пароль еще раз.
ssh-keygen -t rsaпри запросе пароля оставьте его пустым, т. е. просто нажмите enter. вот так просто!!
попробуйте это из коробки, вы толкаете от
ssh [email protected]затем вы должны получить приветственный ответ от github и будете в порядке, чтобы затем нажать.
Я пытаюсь избежать ввода парольной фразы все время также потому, что я использую ssh на windows. То, что я сделал, было изменить мой .файл профиля, так что я ввожу свой пароль один в определенном сеансе. Так что это кусок кода:
SSH_ENV="$HOME/.ssh/environment" # start the ssh-agent function start_agent { echo "Initializing new SSH agent..." # spawn ssh-agent ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV" echo succeeded chmod 600 "$SSH_ENV" . "$SSH_ENV" > /dev/null ssh-add } # test for identities function test_identities { # test whether standard identities have been added to the agent already ssh-add -l | grep "The agent has no identities" > /dev/null if [ $? -eq 0 ]; then ssh-add # $SSH_AUTH_SOCK broken so we start a new proper agent if [ $? -eq 2 ];then start_agent fi fi } # check for running ssh-agent with proper $SSH_AGENT_PID if [ -n "$SSH_AGENT_PID" ]; then ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null if [ $? -eq 0 ]; then test_identities fi # if $SSH_AGENT_PID is not properly set, we might be able to load one from # $SSH_ENV else if [ -f "$SSH_ENV" ]; then . "$SSH_ENV" > /dev/null fi ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null if [ $? -eq 0 ]; then test_identities else start_agent fi fiТак что с этим я набираю свою парольную фразу один раз в сессии..
мне пришлось клонировать git repo с сервера, который не позволял войти в ssh-ключ, но только с пользователем/паролем. Я не нашел способа настроить плагин Git для использования простой комбинации пользователя / пароля, поэтому я добавил следующую команду оболочки в качестве шага предварительной сборки на машине сборки linux, которая зависит от инструмента expect (apt-get install expect):
ЭТО НЕ ОЧЕНЬ ХОРОШИЙ СПОСОБ РЕШЕНИЯ ЭТОЙ ПРОБЛЕМЫ, ТАК КАК ВАШ ПАРОЛЬ ОТОБРАЖАЕТСЯ В ВИДЕ ОТКРЫТОГО ТЕКСТА В КОНФИГУРАЦИИ И ЖУРНАЛАХ JENKINS Работа! ИСПОЛЬЗУЙТЕ ЕГО ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ НЕТ ВОЗМОЖНОСТИ НАСТРОИТЬ АУТЕНТИФИКАЦИЮ RSA-КЛЮЧА ИЛИ ДРУГИЕ ВОЗМОЖНОСТИ КОНФИГУРАЦИИ!
rm -rf $WORKSPACE && expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
добавить одну строку
AddKeysToAgent yesв верхней части.ssh / config файл. Конечно ssh-агент должен быть запущен заранее. Если он не работает ( проверьте поprep ssh-agent), то просто запустите егоeval $(ssh-agent)Теперь ключ загружается по всей системе в память, и вам не нужно снова вводить парольную фразу.
источником решения является https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578
Я попробовал все эти предложения и многое другое, просто чтобы я мог клонировать Git из моего экземпляра AWS. Ничего не получалось. Я, наконец, обманул от отчаяния: я скопировал содержимое id_rsa.паб на моей локальной машине и добавил его к~/.ssh / known_hosts на моем экземпляре AWS.

Comments