Я клонировал свой репозиторий git поверх ssh. Поэтому, каждый раз, когда я общаюсь с мастером происхождения, нажимая или вытягивая, мне нужно повторно ввести мой пароль. Как настроить git так, чтобы мне не нужно вводить мой пароль несколько раз?
Настройка Git через SSH для входа в систему один раз
Ответ 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-адреса. См. Изображение ниже:
Ответ 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, у них есть очень хороший учебник, который объясняет это более четко (по крайней мере для меня).
Ответ 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.