Настройка Git через SSH для входа в систему один раз

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

Ответ 1

Попробуйте ssh-add, вам нужно ssh-agent для запуска и удерживания закрытого ключа

(Хорошо, отвечая на обновленный вопрос, вы сначала запускаете ssh-keygen для генерации открытого и закрытого ключей как Jefromi . Вы помещаете открытый ключ на сервер. Вы должны использовать кодовую фразу, если у вас нет эквивалента пароля открытого текста в вашем закрытом ключе. Но когда вы это сделаете, вам нужно как практическое дело ssh-agent, как описано ниже.)

Вы хотите запустить ssh-agent в фоновом режиме при входе в систему. После входа в систему идея запускать ssh-add один раз и только один раз, чтобы предоставить агенту вашу кодовую фразу, декодировать ваш ключ, Затем агент просто сидит в памяти, когда ваш ключ разблокирован и загружен, готов к использованию каждый раз, когда вы ssh где-то.

Все команды ssh-семейства 1 затем будут обращаться к агенту и автоматически смогут использовать ваш закрытый ключ.

В OSX (err, macOS), системах GNOME и KDE ssh-agent обычно запускается автоматически для вас. Я рассмотрю детали в случае, как и я, у вас также есть среда Cygwin или других окон, где это, безусловно, не сделано для вас.

Начните здесь: man ssh-agent.

Существуют различные способы автоматического запуска агента. Как объясняет справочная страница, вы можете запустить ее так, чтобы она была родителем всех ваших сеансов входа в систему. Таким образом, переменные среды, которые он предоставляет, будут автоматически размещаться во всех ваших оболочках. Когда вы (позже) вызываете ssh-add или ssh, оба будут иметь доступ к агенту, потому что все они имеют переменные среды с магическими сокетами или другими.

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

Мои системы OSX и Ubuntu автоматически запускают настройку запуска агента, поэтому все, что мне нужно сделать, - запустить ssh-add один раз. Попробуйте запустить ssh-add и посмотрите, работает ли он, если это так, тогда вам просто нужно сделать это один раз за перезагрузку.

Моя система Cygwin потребовала его вручную, поэтому я сделал это в своем .profile, и у меня есть .bashrc source .profile:

. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
        ssh-agent > .agent
        . .agent > /dev/null
}

Файл .agent создается автоматически с помощью script; он содержит определения переменных среды и экспорта. Вышеописанное пытается загрузить файл .agent, а затем пытается ps(1) агента. Если он не работает, он запускает агент и создает новый файл агента. Вы также можете запустить ssh-add, и если он не запускает агент.


1. И даже локальный и удаленный sudo с правильным расширением pam.

Ответ 2

Имел аналогичную проблему с GitHub, потому что я использовал протокол HTTPS. Чтобы проверить, какой протокол вы используете, просто запустите

git config -l

и посмотрите на строку, начинающуюся с remote.origin.url. Чтобы переключить протокол

git config remote.origin.url [email protected]:your_username/your_project.git

Ответ 3

Речь идет о настройке ssh, а не git. Если вы еще этого не сделали, вы должны использовать ssh-keygen (с пустой кодовой фразой), чтобы создать пару ключей. Затем скопируйте открытый ключ в удаленный пункт назначения с помощью ssh-copy-id. Если вам не нужны несколько ключей (например, более безопасный с парольной фразой для других целей), или у вас есть некоторые действительно странные вещи с несколькими идентификационными данными, это просто:

ssh-keygen   # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa [email protected]

Изменить: Вы действительно должны просто прочитать ответ DigitalRoss, но: если вы используете ключи с паролями, вам нужно использовать ssh-add <key-file>, чтобы добавить их в ssh-agent (и, очевидно, запустите ssh-agent, если в вашем дистрибутиве еще нет один работает для вас).

Ответ 4

Убедитесь, что при клонировании репозитория вы сделали это с URL-адресом SSH, а не с HTTPS; в поле URL-кода клонирования репо выберите протокол SSH перед копированием URL-адреса. См. Изображение ниже:

enter image description here

Ответ 5

Расширение идей Muein для тех, кто предпочитает редактировать файлы непосредственно над запущенными командами в git - bash или терминале.

Перейдите в каталог .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

Ответ 6

Я думаю, здесь есть две разные вещи. Первый из них заключается в том, что для обычной аутентификации SSH пользователь должен поместить пароль учетной записи (где пароль учетной записи будет аутентифицирован по различным методам, в зависимости от конфигурации sshd).

Вы можете не вводить этот пароль, используя сертификаты. С сертификатами вы все равно должны вводить пароль, но на этот раз это пароль вашего закрытого ключа (который не зависит от пароля учетной записи).

Для этого вы можете следовать инструкциям, указанным steveth45:

С Аутентификация открытого ключа.

Если вы хотите, чтобы каждый раз не вводить пароль сертификата, вы можете использовать ssh-agent, как указано DigitalRoss

Точный способ, которым вы это делаете, зависит от Unix и Windows, но по сути вам нужно запустить ssh-agent в фоновом режиме при входе в систему, а затем при первом входе в систему запустите ssh-add, чтобы предоставить агенту ваш ключевая фраза. Все команды ssh-family затем будут обращаться к агенту и автоматически подбирать вашу фразу.

Начните здесь: man ssh-agent.

Единственная проблема ssh-agent заключается в том, что по крайней мере на * nix вы должны поместить пароль сертификатов на каждую новую оболочку. И тогда сертификат "загружен", и вы можете использовать его для аутентификации на сервере ssh без ввода какого-либо пароля. Но это на этой конкретной оболочке.

С keychain вы можете сделать то же самое, что и ssh-agent, но "общесистемный". После включения компьютера вы откроете оболочку и поместите пароль сертификата. И тогда каждая другая оболочка будет использовать этот "загруженный" сертификат, и ваш пароль никогда не будет запрошен, пока вы не перезагрузите компьютер.

У Gnome есть аналогичное приложение, называемое Gnome Keyring, которое запрашивает ваш пароль сертификата при первом использовании, а затем надежно хранит его поэтому вас больше не будут спрашивать.

Ответ 7

Если вы клонировали с помощью 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 или новее. При перезагрузке системы нам может понадобиться снова ввести пароль.

Ответ 8

Если вы используете github, у них есть очень хороший учебник, который объясняет это более четко (по крайней мере для меня).

http://help.github.com/set-up-git-redirect/

Ответ 9

ssh-keygen -t rsa

Когда вас попросят ввести ключевую фразу, оставьте ее пустой, а затем нажмите клавишу ввода. так просто!

Ответ 10

Попробуйте это из окна, которое вы нажимаете

    ssh [email protected]

Затем вы получите приветственный ответ от github и будете в порядке, чтобы затем нажать.

Ответ 11

Мне пришлось клонировать репо git с сервера, который не разрешал вход vie ssh key, но только с пользователем/паролем. Я не нашел способа настроить плагин git для использования простой комбинации пользователей и паролей, поэтому я добавил следующую команду оболочки в качестве этапа предварительной сборки на машине для создания Linux, которая зависит от ожидаемого инструмента (apt-get install expect)

ЭТО НЕ ХОРОШЕЕ ПУТЬ РЕШЕНИЯ ЭТОЙ ПРОБЛЕМЫ, КАК ВАШ ПАРОЛЬ ПОКАЗЫВАЕТСЯ ЧИСТОЙ ТЕКСТОМ В КОНФИГУРАЦИИ И ЛОЖДАХ РАБОТЫ JENKINS! ТОЛЬКО ИСПОЛЬЗУЙТЕ ЭТО, ЕСЛИ НЕ МОЖЕТ ПОНЯТИЕ КОНФИГУРИРОВАТЬ АВТОРИЗАЦИЮ RSA-КЛЮЧА ИЛИ ДРУГИХ КОНФИГУРАЦИЙ ВОЗМОЖНОСТЕЙ!

rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone [email protected]:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'

Ответ 12

Добавьте одну строку AddKeysToAgent yes в верхнюю часть файла .ssh/config. Ofcourse ssh-agent должен быть запущен заранее. Если он не работает (проверьте prep ssh-agent), просто запустите его eval $(ssh-agent)

Теперь ключ загружается по всей стране в память, и вам не нужно снова вводить парольную фразу.

Источником решения является https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578

Ответ 13

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

    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

поэтому с этим я набираю свою кодовую фразу один раз в сеансе.

Ответ 14

Я пробовал все эти предложения и многое другое, поэтому я мог git клонировать из моего экземпляра AWS. Ничего не получилось. Я, наконец, обманулся от отчаяния: я скопировал содержимое id_rsa.pub на свой локальный компьютер и добавил его к ~/.ssh/known_hosts в моем экземпляре AWS.