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



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

1620   14  

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-адреса. См. изображение ниже:

enter image description here

расширение мыслей 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, а у них есть очень хороший учебник, который объясняет это более четко (по крайней мере для меня).

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

Если вы клонировали с помощью 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

    Ничего не найдено.