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