Git push требует имя пользователя и пароль


1437

Я клонировал Git-репозиторий со своей учетной записи GitHub на свой ПК.

Я хочу работать как с моим ПК, так и с ноутбуком, но с одной учетной записью GitHub.

Когда я пытаюсь нажать или вытащить GitHub с помощью моего компьютера, ему требуется имя пользователя и пароль, но не когда я использую ноутбук!

Я не хочу вводить свое имя пользователя и пароль каждый раз, когда я взаимодействую  origin. Что мне здесь не хватает?


1
Да, но что мне делать? Я сгенерировал кейген, что еще?
TooCooL

1
Вам необходимо зарегистрировать pubkey в своей учетной записи Github ( github.com/account/ssh ) и настроить свой SSH-клиент на использование правильного имени пользователя.
jwodder

1
Я сделал все это, но все же это требует имени пользователя и пароля! Можно ли использовать одну учетную запись на двух ПК?
TooCooL

1
Этот вопрос охватывает все ваши варианты для этого довольно хорошо: stackoverflow.com/questions/5343068/…
Форд

2
Больше не нужно переключаться на ssh. Это возможно и с HTTPS. Проверьте мой ответ.
Варун Ахар

Ответы:


1962

Распространенной причиной является клонирование с использованием по умолчанию (HTTPS) вместо SSH. Вы можете исправить это, перейдя в свой репозиторий, нажав «Клонировать или загрузить», затем нажав кнопку «Использовать SSH» над полем URL и обновив URL-адрес удаленного источника, например:

git remote set-url origin git@github.com:username/repo.git

Это задокументировано на GitHub: переключение удаленных URL-адресов с HTTPS на SSH .


61
И выяснить , как изменить URL, перейдите сюда: stackoverflow.com/a/2432799/60488 (спойлер: git remote set-url origin git://new.url.here)
Йохан Kool

136
Если вы не можете использовать ssh для ограничений безопасности (как я), вы можете сделать: git remote set-url origin https://name:password@github.com/repo.git (извлечено из комментария здесь)
Бруно Бериссо

134
Почему клонирование с HTTPS является распространенной ошибкой? GitHub теперь рекомендует использовать HTTPS.
Деннис

8
По умолчанию это @smftre, но вы можете использовать помощника для кэширования ваших учетных данных .
Деннис

28
Исправлено мое Permission denied (publickey)использование этого руководства: help.github.com/articles/generating-ssh-keys .
Вольтрево

387

Постоянная аутентификация в репозиториях Git

Запустите следующую команду, чтобы включить кэширование учетных данных :

$ git config credential.helper store
$ git push https://github.com/owner/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

Вы также должны указать срок действия кэширования ,

git config --global credential.helper 'cache --timeout 7200'

После включения кэширования учетных данных оно будет кэшироваться в течение 7200 секунд (2 часа) .


вам также может понадобиться изменить свой удаленный URL-адрес. git remote set-url origin https://git@github.com/<owner>/<repo>.git Это также работает с 2FA
Bron Davies,

14
Это должен быть принятый ответ. Это точно ответить на вопрос.
Авраам Т.С.

будет ли он автоматически удален из файлов Ubuntu после 7200 в целях безопасности?
Усама

или 43 200 за 12 часов. Вы входите один раз в день. Это может быть более разумным для некоторых.
Urasquirrel

Только что попробовал - получил:fatal: protocol 'https' is not supported
Джоэл

134

Я только столкнулся с той же самой проблемой, и самое простое решение, которое я нашел, состояло в том, чтобы использовать URL-адрес SSH вместо HTTPS:

ssh://git@github.com/username/repo.git

И не это

https://github.com/username/repo.git

Теперь вы можете проверить с помощью только ключа SSH вместо usernameи password.


1
Самый простой способ решить проблему, просто отредактировать URL удаленного источника. Это все. Выполнено. Thanx!
JOM

1
Это сработало для меня, но сначала мне нужно было решить эту проблему: stackoverflow.com/questions/2643502/…
Шридхар Сарнобат

для настройки ключа SSH вы можете обратиться по адресу help.github.com/articles/connecting-to-github-with-ssh
ksridhar,

120

Помимо перехода на SSH, вы также можете продолжать использовать HTTPS, если не возражаете, чтобы ввести свой пароль в виде открытого текста. Вставьте это в свой файл, ~/.netrcи он не будет запрашивать ваше имя пользователя / пароль (по крайней мере, в Linux и Mac):

machine github.com
       login <user>
       password <password>

Дополнение (см. Второй комментарий VonC): в Windows имя файла %HOME%\_netrc.

Также прочитайте первый комментарий VonC на случай, если вы хотите зашифровать.

Еще одно дополнение (см. Комментарий user137717), которое вы можете использовать, если у вас Git 1.7.10 или новее. .

Кэшируйте ваш пароль GitHub в Git с помощью помощника по учетным данным :

Если вы клонируете репозитории GitHub с использованием HTTPS, вы можете использовать помощник по учетным данным, чтобы Git запоминал имя пользователя и пароль GitHub при каждом обращении к GitHub.

Это также работает на Linux, Mac и Windows.


3
Да, он работает в Linux, но не работает для gitbash в Windows.
Продажи Dielson

3
@ dolmen Я понимаю, что ты имеешь в виду, но если ты не против поставить свой пароль в открытом виде, ты можешь ... зашифровать его;) См. stackoverflow.com/a/18362082/6309 . и это даже совместимо с 2-факторной аутентификацией (2FA) Github: stackoverflow.com/a/18607931/6309
VonC

3
@ Продает, он отлично работает из сеанса DOS или git bash в Windows, при условии, что вы вызываете свой файл %HOME%\_netrc(вместо ~/.netrc). См. Также stackoverflow.com/a/18362082/6309 для шифрования этого файла.
VonC

1
Это очень хорошо работает в Linux, особенно с использованием git over VPN.
Эван Ху,

3
Вам не нужно помещать это в открытый текст или шифровать это. вспомогательная утилита кеширует его для вас и требует 30 секунд для настройки. help.github.com/articles/caching-your-github-password-in-git/...
user137717

86

Для непосвященных, которых смущают предыдущие ответы, вы можете сделать:

git remote -v

Который ответит что-то вроде

origin    https://yourname@github.com/yourname/yourrepo.git (fetch)
origin    https://yourname@github.com/yourname/yourrepo.git (push)

Затем вы можете запустить команду, которую предложили многие другие, но теперь вы знаете свое имя и ваш репо сверху, так что вы можете просто вырезать и вставить yourname/yourrepo.gitиз вышеперечисленного в:

git remote set-url origin git@github.com:yourname/yourrepo.git

1
Я попробовал это. Это спрашивает меня paraphraseкаждый раз. Я не настроил один
samayo

Что идет вместо yourrepo?
Raphi

2
@Raphi беги git remote -vи посмотри, что выйдет
Давиде

1
Другие ответы должны предшествовать этому совету.
Беннетт Браун

57

Если вы используете SSH и секретный ключ шифруется с помощью ключевой фразы, то вам все равно будет предложено ввести парольную фразу / пароль для закрытого ключа , когда вы делаете сетевые операции с Git , как push, pullиfetch .

Используйте ssh-agent для сохранения пароля-пароля / пароля

Если вы хотите избежать необходимости вводить парольную фразу каждый раз, вы можете использовать ее ssh-agentдля хранения учетных данных парольной фразы личного ключа один раз за сеанс терминала, как я объясняю в своем ответе на Не удалось открыть соединение с вашим агентом аутентификации :

$ eval `ssh-agent -s`
$ ssh-add

В Windows msysgit Bash вам нужно оценить вывод ssh-agent, но я не уверен, нужно ли вам делать то же самое в других средах разработки и операционных системах.

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

Убить агента

Когда вы закончите сеанс терминала, вы можете завершить работу ssh-agentс флагом kill -k:

$ ssh-agent -k

Как объяснено в ssh-agentруководстве :

-k

Убить текущего агента (заданного переменной среды SSH_AGENT_PID).

Дополнительный тайм-аут

Кроме того, он может принимать необязательный параметр времени ожидания, например, так:

$ ssh-add -t <timeout>

где <timeout>имеет формат <n>hдля <n>часов, в <n>mтечение <n>минут, и так далее.

Согласно ssh-agentинструкции :

-t life

Установите значение по умолчанию для максимального времени жизни идентификаторов, добавляемых к агенту. Время жизни может быть указано в секундах или в формате времени, указанном в sshd_config (5) . Время жизни, указанное для идентификатора с помощью ssh-add (1), переопределяет это значение. Без этой опции максимальное время жизни по умолчанию - навсегда.

Смотрите эту страницу для большего количества форматов времени .

Предупреждение о безопасности для пользователей Cygwin

Пользователи Cygwin должны знать о потенциальной угрозе безопасности при использовании ssh-agent в Cygwin :

люди должны быть осведомлены о потенциальных опасностях ssh-agent в Cygwin 1 , хотя при локальном netstat и удаленном сканировании портов не представляется, что порт, указанный в / tmp / ssh-foo, доступен любому ...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

И по приведенной ссылке :

Тем не менее, обратите внимание, что доменные сокеты Cygwin для Unix являются ФУНДАМЕНТАЛЬНО НЕДОСТАТОЧНЫМИ, и поэтому я настоятельно не рекомендую использовать ssh-agent под Cygwin.

когда вы запускаете ssh-agent в Cygwin, он создает сокет AF_UNIX в /tmp/ssh-$USERNAME/каталоге. Под Cygwin сокеты AF_UNIX эмулируются через сокеты AF_INET. Вы можете легко увидеть это, если загляните в /tmp/ssh-$USERNAME/agent-socket-*файл через Блокнот. Вы увидите что-то вроде

!<socket >2080

тогда беги netstat -aи удивляйся! У вас есть программа, слушающая порт 2080. Это ssh-agent. Когда ssh получает запрос RSA от сервера, он ссылается на соответствующий /tmp/ssh-$USERNAME/agent-socket-*(в нашем случае Cygwin означает, что он откроет соединение localhost:2080) и просит ssh-agent обработать запрос RSA с помощью имеющегося у него закрытого ключа, а затем он просто передает ответ, полученный от ssh-agent, на сервер.

В Unix такой сценарий работает без проблем, потому что ядро ​​Unix проверяет разрешения, когда программа пытается получить доступ к сокету AF_UNIX. Однако для сокетов AF_INET соединения являются анонимными (читай «небезопасно»). Представьте, что у вас запущен ssh-агент Cygwin. Вредоносный хакер может портить ваш ящик, найти открытый порт, используемый ssh-agent, открыть соединение с вашим SSH-сервером, получить от него запрос RSA, отправить его вашему ssh-agent через открытый порт, который он / она нашел, получить Ответ RSA, отправьте его на сервер SSH и вуаля, он / она успешно вошли на ваш сервер как вы.


Звучит красиво и подробно. Я позаботился о помощнике по учетным данным https , а ты позаботился о ssh-соединениях! +1
VonC

49

Источник: Настройка Git

Следующая команда сохранит ваш пароль в памяти на некоторое время (для Git 1.7.10 или новее).

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)

2
Я предпочитаю справку по учетным данным «netrc» ( stackoverflow.com/a/18362082/6309 ) для кэширования нескольких учетных данных (без необходимости запоминать все пароли). Но если вы работаете в Windows и хотите использовать кеш-память, вам нужно winstore ( stackoverflow.com/a/15310274/6309 )
VonC

9
Это лучший ответ на данный момент ИМХО.
Чиль тен Бринке

35

Когда вы используете https для Git pull & push, просто настраивайте remote.origin.urlсвой проект, чтобы избежать ввода имени пользователя (или / и пароля) при каждом нажатии.

Как настроить remote.origin.url:

Формат URL:
    https: // {имя пользователя: пароль @} {github.com/ владелец} / {} репо

Параметры в URL:

* username 
Необязательно, имя пользователя для использования при необходимости.
аутентификация, если указано, нет необходимости вводить имя пользователя снова, когда требуется аутентификация. Не используйте электронную почту; используйте ваше имя пользователя без «@», иначе URL не может быть проанализирован правильно, * пароль необязательно, пароль для использования при необходимости аутентификации. Если указано, нет необходимости повторно вводить пароль при необходимости аутентификации. Подсказка: это значение хранится в виде обычного текста, поэтому из соображений безопасности не указывайте этот параметр, * например git config remote.origin.url https: //eric@github.com/eric/myproject

@Update - использование ssh

Я думаю, что использование sshпротокола - лучшее решение, чем https, хотя шаг настройки немного сложнее.

Грубые шаги:

  • Создайте ключи SSH с помощью команды, например, ssh-keygenв Linux, в Windows msysgitпредоставьте аналогичные команды.
  • Держите секретный ключ на локальном компьютере в нужном месте, например, ~/.ssh. И добавьте его в агент ssh с помощью ssh-addкоманды.
  • Загрузите открытый ключ на сервер Git.
  • Изменение remote.origin.urlрепозитория Git на sshстиль, например,git@gitlab.com:myaccount/myrepo.git
  • Затем, когда вы нажимаете или толкаете, нет необходимости вводить имя пользователя или пароль.

Советы:

  • Если у вашего ключа ssh есть фраза-пароль, то вам нужно вводить ее при первом использовании ключа после каждого перезапуска вашего компьютера, по умолчанию.

@Update - Переключение между httpsи sshпротоколом.

Достаточно простого изменения remote.origin.url, или вы можете редактировать repo_home/.git/configнапрямую, чтобы изменить значение (например, используя viв Linux).

Обычно я добавляю строку для каждого протокола и закомментирую один из них, используя #.

Например

[удаленное "происхождение"]
        url = git@gitlab.com: myaccount / myrepo.git
        # url = https: //myaccount@gitlab.com/myaccount/myrepo.git
        fetch = + refs / heads / *: refs / remotes / origin / *

Вы уверены, что URL-адрес на основе http поддерживает расширение имени пользователя? В руководстве git-fetch(1)упоминается, что только для git/ ssh-основных URL-адресов.
день

@plmday да, я использую его, моя версия git 1.8.2.3 и 1.8.4, я не уверен, что более высокая версия изменится по этому поводу.
Эрик Ван

1
Примечание: указание вашего пароля в URL (даже при использовании HTTPS) означает, что он виден всему, что находится между вами и вашим хранилищем.
Уильям

3
Нет, предоставление пароля в https://username:password@github.com/безопасности. См stackoverflow.com/questions/4980912/...
Slowhand

1
И это было то, что я искал (для полной автоматизации)
Джошуа

16

Вы можете кэшировать свой пароль GitHub в Git:

Просто следуйте инструкциям из официальной документации GitHub .

Следуя инструкциям, приведенным в приведенной выше ссылке, вы сможете загружать / извлекать данные из своего хранилища, не вводя имя пользователя и пароль каждый раз.


5
это лучший ответ здесь и должен быть принят IMO
TheZuck

1
Согласитесь, ответ со ссылкой на официальную документацию должен иметь приоритет. Я с радостью следовал их инструкциям и предпочитаю использовать стандартные соглашения.
Джонниб

10

Вот еще один вариант:

Вместо того чтобы писать

git push origin HEAD

Вы могли бы написать:

git push https://user:pass@yourrepo.com/path HEAD

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


1
В Bash добавление одного или нескольких ведущих пробелов обычно не позволяет использовать его в истории. Но не в Git Bash .
Питер Мортенсен

Это просто сработало для меня :)
Навин Кумар V

9

То, что работало для меня, было редактировать .git/configи использовать

[remote "origin"]
        url = https://<login>:<password>@gitlab.com(...).git

Само собой разумеется, что это небезопасный способ хранения вашего пароля, но есть среды / случаи, когда это не может быть проблемой.


6

Если ключ или .netrcфайл SSH не работает для вас, то другое простое, но менее безопасное решение, которое может работать для вас, - это git-credential-store - Помощник для хранения учетных данных на диске:

git config --global credential.helper store

По умолчанию учетные данные будут сохранены в файл ~/.git-credentials. Он будет создан и записан.

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


5

Я была такая же проблема.

Итак, я изменил .git/configфайл из своего проекта,

url = https://github.com/<your-user-here>/<your-repo-here>

в

url = git@github.com:<your-user-here>/<your-repo-here>

и добавил открытый ключ SSH в профиль Git, который находится в настройке.

Для открытого ключа SSH:

cat ~/.ssh/id_rsa.pub

1
с cat ~/.ssh/id_rsa.pubпомощью ключа rsa и вставьте его в настройки веб-портала git.
Анупам Маурья

4

Обновление для HTTPS:

GitHub запустил новую программу для Windows, которая хранит ваши учетные данные при использовании HTTPS:

Использовать:

  • Скачать программу отсюда

  • Как только вы запустите программу, она отредактирует ваш .gitconfigфайл. Еще раз проверьте, правильно ли он отредактировал, .gitconfigесли у вас есть несколько из них. Если он не редактировал правильный, добавьте следующее к вашему.gitconfig

    [credential]
        helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
    

    ПРИМЕЧАНИЕ разрыв строки после [credential]. Требуется.

  • Откройте клиент командной строки и попробуйте git push origin masterодин раз. Если он запрашивает у вас пароль, введите его и все. Пароль сохранен!


Спасибо Варуну, сработало очарование!
Радость

4

Для пользователей Windows Git, после запуска git config --global credential.helper store, если он по-прежнему запрашивает пароль, лучше проверить, куда записывается файл конфигурации, используя эту команду

git config --list --show-origin

В моем случае после ручного редактирования файла конфигурации 'C: \ Program Files \ Git \ mingw64 \ etc \ gitconfig' и добавления следующего текста все заработало.

[credential]
    helper = store

3

У вас в основном есть два варианта.

Если вы используете одного и того же пользователя на обеих машинах, вам нужно скопировать ключ .pub на ваш ПК, чтобы GitHub знал, что вы один и тот же пользователь.

Если вы создали новый файл .pub для своего ПК и хотите относиться к машинам как к другим пользователям, вам необходимо зарегистрировать новый файл .pub на веб-сайте GitHub.

Если это все еще не работает, это может быть потому, что ssh не настроен правильно и ssh не может найти расположение ваших ключей. Пытаться

ssh -vv username@github.com

Чтобы получить больше информации, почему SSH не работает.


3

Обновите файл конфигурации Git напрямую ( если вы не хотите запоминать необычные команды ):

Откройте ваш .git/configфайл в вашем любимом текстовом редакторе. Он будет в папке, которую вы клонировали, или в репозитории, в котором вы выполнили git init. Перейдите в этот репозиторий. .gitявляется скрытой папкой, и нажатие Ctrl+ Hдолжно показать скрытую папку ( ls -aв терминале).

Ниже приведен пример .git/configфайла. Скопируйте и вставьте эти строки и обязательно обновите эти строки своей информацией Git.

[user]
        name = Tux
        email = tux@gmail.com
        username = happy_feet

[remote "origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/origin/*

Измените часть URL со следующим форматом для SSH:

url = git@github.com:happy_feet/my_code.git

( Вышеприведенные форматы не меняются на различных удаленных серверах Git, таких как GitHub или Bitbucket. То же самое, если вы используете Git для контроля версий ):

Примечание: способ подключения SSH к удаленному репозиторию Git потребует добавления вашего открытого ключа SSH на удаленный сервер Git ( например, GitHub или Bitbucket. Найдите на странице настроек ключи SSH ).

Чтобы узнать, как генерировать ключи SSH, обратитесь к разделу : Создание ключей SSH.


2

Вот что сработало для меня:

git remote set-url origin https://username@github.com/username/reponame.git

Пример:

git remote set-url origin https://jsmith@github.com/jsmith/master.git

Спасибо, я приветствую ваш ответ
Мандип Сингх

2

Вам нужно выполнить два шага -

  1. git remote remove origin
  2. git remote add origin git@github.com:NuggetAI/nugget.git

Обратите внимание, что URL Git является URL-адресом SSH, а не URL-адресом HTTPS ... Который вы можете выбрать здесь:

Введите описание изображения здесь


2

Если вы клонировали HTTPS вместо SSH и столкнулись с проблемой с запросом имени пользователя и пароля при извлечении, отправке и извлечении. Вы можете решить эту проблему просто для UBUNTU

Шаг 1: перейти в корневой каталог

cd ~/

создать файл .git-credentials

Добавить этот контент в этот файл с вами usename passwordиgithosting URL

https://user:pass@example.com

Затем выполните команду

git config --global credential.helper store

Теперь вы сможете без проблем извлекать и извлекать все детали из вашего репо.


0

Если вы используете Git (например, Git Bash) под Windows (и если вы не хотите переключаться с HTTPS на SSH), вы также можете использовать Git Credential Manager для Windows

Это приложение будет хранить имя пользователя и пароль для вас ...


0

Как говорили многие пользователи, вам просто нужно изменить URL-адрес хранилища Git с HTTPS на SSH.

Если вы не сгенерировали SSH-ключ на своем компьютере, вам придется это сделать.

Так же, как дополнительная информация, после этого изменения я все еще получал ту же ошибку:

В правах отказано.

В моем случае проблема заключалась в том, что я использовал оболочку Windows для выполнения команды ngh; так как эта команда должна открыть приглашение для запроса фразы SSH, а оболочка Windows не открывает такие запросы, проверка подлинности просто не удалась.

Итак, мне просто нужно было открыть оболочку Git и выполнить там команду ngh, вставлять фразу SSH в запрос каждый раз, когда он ее запрашивал, и «вуаля» ... Это просто отлично работало!


0
    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

    # stop :: how-to use different ssh identity files

0

Если у вас включен 2FA аккаунт 2FA в вашей учетной записи Github, ваш обычный пароль не будет работать для этой цели, но вы можете сгенерировать токен личного доступа и использовать его вместо него.

Посетите страницу Settings-> Developer Settings-> Personal Access Tokensв GitHub ( https://github.com/settings/tokens/new ) и создайте новый токен со всеми разрешениями репо :

создать личный токен доступа GitHub

На странице отобразится новое значение токена. Сохраните это значение и используйте его вместо пароля при отправке в ваш репозиторий на GitHub:

> git push origin develop
Username for 'https://github.com': <your username>
Password for 'https://<your username>@github.com': <your personal access token>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.