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

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

14 ответов

Решение

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

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

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

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

В системах 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
}

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


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

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

git config -l

и посмотрите на строку, начинающуюся с remote.origin.url, Для переключения вашего протокола

git config remote.origin.url git@github.com:your_username/your_project.git

Если вы клонировали с использованием 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, а не 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-адреса. Смотрите изображение ниже:

Расширение мыслей Мейна для тех, кто предпочитает редактировать файлы напрямую, выполняя команды в 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 = git@github.com:<username>/<projectname>.git

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

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

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

С аутентификацией с открытым ключом.

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

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

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

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

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

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

ssh-keygen -t rsa

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

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

    ssh git@github.com

Затем вы должны получить приветственный ответ от GitHub и будет хорошо, чтобы потом нажать.

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

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

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

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

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

Я пытаюсь избежать ввода ключевой фразы все время, потому что я использую 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

так что с этим я набираю свой пароль один раз в сеансе..

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

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

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

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

Другие вопросы по тегам