Git постійно запитує мене на пароль


665

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

Я використовую Mac OS X і GitHub, і я налаштовував Git і свої SSH ключі відповідно до вказівки сторінки GitHub Setup Git .

Я також додав ключ github SSH до моєї брелки Mac OS X, як згадується на сторінці прохідних ключів SSH GitHub . Мій відкритий ключ зареєстрований у Git.

Тим не менш, кожен раз, коли я намагаюся витягнути Git, я повинен вводити своє ім’я користувача та пароль. Чи потрібно щось інше, ніж ключ SSH, для цього потрібно налаштувати?


1
Дурне запитання, але ви перевірили, що ключ SSH працює, коли просто використовуєте ssh на машині з git?
Курт Штуцман

4
Ви маєте на увазі щось на кшталт ssh -T git@github.com? Так, це працює чудово (якщо трохи повільно).
Катерина


Для https URL-адреси ви можете використовувати (з git1.8.3 +) помічник ввірених даних git ' netrc'. Дивіться повний приклад тут .
VonC

Я є користувачем Windows, і я також зіткнувся з проблемою запиту пароля навіть після додавання свого відкритого ключа до файлу дозволеного_кейсу сервера. Яка проблема була в тому, що я не зберігав свої публічні / приватні ключі під .ssh папкою c: \ program files \ git. Якщо хтось стикається з такою проблемою, скопіюйте свої ключі в цю папку та спробуйте натиснути / потягнути.
Раджа Амер Хан

Відповіді:


797

Я думаю, у вас може бути неправильна URL-адреса сховища Git.

Відкрийте .git/configі знайдіть розділ [віддалене "походження"]. Переконайтеся, що ви використовуєте SSH:

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

Ви можете побачити URL-адресу SSH на головній сторінці вашого сховища, якщо натиснути « Клонувати» або завантажити та вибрати ssh .

І НЕ той httpsчи gitодин:

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

Тепер ви можете перевірити лише ключ SSH замість імені користувача та пароля.

Якщо Git скаржиться на це 'origin' has already been added, відкрийте .configфайл і відредагуйте url = "..."частину після [remote origin]якurl = ssh://github/username/repo.git


Те саме стосується інших послуг. Переконайтеся, що адреса виглядає так:protocol://something@url

Напр. .git/configДля Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

4
Це може бути. Коли я закликаю git remote -v, я отримую: origin github.com/Foo/Bar.git (fetch) походження github.com/Foo/Bar.git (push), тоді як для роботи з SSH здається, що це має бути: origin git @ github.com: Foo / Bar.git (fetch) походження git@github.com: Foo / Bar.git (push) Це може бути тому, що я спочатку перевірив свій проект за допомогою програми Mac GitHub ( mac.github.com ). Будь-яка ідея, як я можу це виправити?
Катерина

8
Або виправте URL-адресу у файлі .git / config, скористайтеся git-remote, щоб виправити його, або видаліть локальне репо і знову клонуйте його з правильною URL-адресою.
static_rtti

91
Просто щоб прописати це (як мені було потрібно): відкрийте .git / config та в [remote "origin"]наборі розділів url = ssh://git@github.com/username/Repo.git. Це працювало для мене.
Грег К

13
Як не дивно, рішення ГрегаК не працювало для мене, але url = git@github.com:organization/Repo.gitпрацювало. +1 за те, що веде мене по правильному шляху! Успіху!
jmort253

3
Я не можу підкреслити, наскільки це важливо для CLONE за допомогою ssh: // git @ github / [ім'я користувача] / [reponame]. Git - ви хочете використовувати ключ для доступу до GIT, не потрібно вводити своє ім’я користувача та пароль кожен раз . Я знайшов єдиний спосіб виправити це - видалити локальне репо і знову клонувати $ git clone ssh: // git @ github / [ім'я користувача] / [reponame] .git
Джин Майерс

555

Налаштування povericial.helper

В OS X (зараз macOS) запустіть це в Terminal :

git config --global credential.helper osxkeychain

Це дозволяє Git використовувати файл Keychain.app для зберігання імені користувача та пароля та для отримання парольної фрази до вашого приватного ключа SSH з брелка.

Для використання в Windows:

git config --global credential.helper wincred

Вирішення проблем

Якщо помічник облікових даних Git правильно налаштований, macOS зберігає пароль у брелок. Іноді зв’язок між SSH та паролями, що зберігаються в брелоку, може розірватися. Запустіть ssh-add -Kабо ssh-add ~/.ssh/id_rsaзнову додайте ключ до брелка.

macOS v10.12 (Sierra) змінюється на ssh

Для macOS v10.12 (Sierra) ssh-add -Kйого потрібно запускати після кожного перезавантаження. Щоб цього уникнути, створюйте ~/.ssh/configцей вміст.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Зі ssh_config manсторінки 10.12.2:

UseKeychain

У macOS визначає, чи повинна система шукати фрази в ключовій мережі користувача при спробі використання певного ключа. Коли пропускна фраза надається користувачем, ця опція також визначає, чи слід зберігати пароль у брелок після перевірки його правильності. Аргумент повинен бути "так" або "ні". За замовчуванням - "ні".

Apple додала Technote 2449, який пояснює, що сталося.

Перед macOS Сьєрра sshпредставив діалогове вікно із запитом вашої парольної фрази та запропонував би можливість зберігати її у брелок. Цей користувальницький інтерфейс деякий час тому був застарілий і його було видалено.


30
Це, безумовно, найкращий спосіб зробити це, оскільки програма Github для OSX (можливо, також для Windows) використовує за замовчуванням шлях https для git repos. Існує також вагома причина для використання https, а не ssh / git, оскільки багато корпоративних мереж дозволяють здійснювати трафік лише через порт 80 і 443 з міркувань безпеки.
кодеггер

2
Вам потрібен git 1.7.10 або новіший, щоб скористатись допоміжною інформацією.
jbandi

3
+1 для рішення keychain.app. Це ВЕЛИКО для мене, тому що git-сервер мого роботодавця підтримує лише http, що обслуговується через apache, і вони сильно перешкоджають використанню .netrcфайлового методу, який ставить ваш пароль у простому тексті.
Джош

3
Зауважте, що я отримав помилку, 'credential-osxkeychain' is not a git command.оскільки у мене не було встановлено помічника ввімкнення даних. Я дотримувався інструкцій, щоб встановити його: help.github.com/articles/set-up-git#password-caching
Х'ю

2
Дякую за оновлення Sierra, я щойно оновив і не міг зрозуміти, чому github продовжував просити pw, коли я додав git config --global credential.helper osxkeychainфайл config у своєму .sshкаталозі.
піксель 67

139

Це сталося зі мною, коли я перейшов на macOS v10.12 (Sierra). Схоже, агент SSH очистився після оновлення.

$ ssh-add -L
The agent has no identities.

Просто запущений ssh-addмій існуючий ідентичність. Я ввів пароль і було добре піти знову.


9
+1 перервано оновленням Сьєрра. Зверніть увагу, що пароль - це пароль для вашого ключа SSH, а не пароль користувача Mac.
mbonness

1
Робота ssh-add працює, але, схоже, скидається, закривши вікно терміналу. Можливо, це нова «особливість».
joshd

Це вдруге відбулося з іншим оновленням Sierra (10.12.2), але застосовується те саме виправлення.
Брайан

Хтось знає, як це не скинути після закриття терміналу?
nickjwallin

1
Я щойно оновив свій macbook pro до 10.12.2, і це зламало мою гру. Використання ssh-add повністю працювало для мене. Дякую @amcc!
jimmyplaysdrums

68

Використовуйте це: Замініть github.com відповідним іменем хоста

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

У мене вже є такий набір під час перегляду git remote -v. Тим не менш, мені все ще пропонується ввести пароль.
ІгорГанапольський

Це ж я встановив як те, що він запропонував, але я все одно отримую запит на пароль, як це запобігти?
cyber8200

@IgorGanapolsky: Ви коли-небудь знаходили рішення для вас?
cyber8200

1
Це працює належним чином. Це дивно, що віддалена URL-адреса з git@**не підказує облікові дані та URL-адресу з https@**:). Таким чином я знайшов цього док .
Sujit Kumar Singh

54

Як уже говорили інші, ви можете встановити помічник кешу пароля. Я в основному просто хотів опублікувати посилання на інші платформи, а не тільки на Mac. Я запускаю сервер Linux, і це було корисно: Кешування вашого пароля GitHub в Git

Для Mac:

git credential-osxkeychain

Windows:

git config --global credential.helper wincred

Linux:

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

5
Мені довелося прокрутити вниз до третьої відповіді, щоб побачити інструкції Linux, вони повинні бути в основному відповіді, оскільки це поширена проблема.
KoldBane

22

Також шукайте, хто просить у вас парольну фразу. Це Git чи ваш SSH-агент?

У моєму випадку, кожного разу, коли я git pullце робив, просив мене:

Enter passphrase for key '/work/username/.ssh/id_rsa':

Тож я припустив, що це Гіт просить пройти фразу. Тому я продовжував полювати на рішення, аби потім зрозуміти, що мій агент SSH закрився. Які можна виправити за допомогою eval $(ssh-agent)та ssh-addяк зазначено тут.

Крім того, я вставляю нижче невеликий фрагмент, який ви можете додати до свого ~/.bashrcфайлу (або його еквівалента), щоб переконатися, що ваш SSH-агент запускається під час входу.

У будь-якому випадку це була досить дурна помилка, яку я допустив, але розміщуючи її тут, про всяк випадок, коли це допоможе комусь заощадити час від гавкання неправильного дерева, як я.

# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi


Досить , що ви пропускаєте рядок в коді вище - відповідно з stackoverflow.com/a/18915067/277023 вам потрібно матиSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

Примітка. Хоча це зручно, Git зберігатиме ваші облікові дані в чистому тексті у локальному файлі (.git-облікові дані) у вашому каталозі проектів (див. Нижче "домашній" каталог). Якщо вам це не подобається, видаліть цей файл та перейдіть до використання кеш-опції.

Якщо ви хочете, щоб Git знову попросив вас мати облікові дані кожного разу, коли потрібно підключитися до віддаленого сховища, ви можете запустити цю команду:

git config --unset credential.helper

Для зберігання паролів у .git-облікових даних у каталозі% HOME% на відміну від каталогу проекту: використовуйте прапор --global

git config --global credential.helper store

9

Керівництво по Git у Windows та GitHub за допомогою SSH для натискання / перетягування: Ілюстрований посібник із Git у Windows

  1. Завантажте та встановіть PuTTY
  2. Встановити змінну середовища 'GIT_SSH' = 'шлях \ до \ plink.exe' (у встановленій папці putty) - дуже важливо !!!
  3. Перезапустіть Windows Explorer, щоб змінні середовища набули чинності (не можна лише перезапустити командний рядок)
  4. Запустіть puttygen.exe для створення нового ключа, скопіюйте відкритий ключ на сайт GitHub
  5. Збережіть цей новий приватний ключ десь безпечно на диску (бажано не Dropbox )
  6. Запустіть putty.exe і підключіть SSH до github.co
  7. Швидко перейдіть до папки запуску, запустивши "shell: startup".
  8. Зробіть запуск приватного ключа в Windows через конкурс. Створіть ярлик у папці запуску із синтаксисом "шлях \ до \ pageant.exe" "шлях \ до \ приватна ключа"
  9. Нам не потрібно встановлювати налаштування "puttykeyfile" всередині .git / config наших сховищ
  10. Дуже важливо , що використовується "URL-адреса клонування SSH" GitHub, а не HTTPS.

Ніхто більше не повинен використовувати шпаклівку. Тепер ви можете робити все за допомогою вбудованих утиліт Windows 10. Нехай шпаклівка, просто бути шпаклівкою.
Ян Сміт

9

У Windows для Git 1.7.9+ запускайте таку команду в командному рядку, щоб відкрити файл конфігурації в текстовому редакторі:

    git config --global --edit

Потім у файл додайте наступний блок, якщо його немає, або відредагуйте його відповідно:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

Збережіть і закрийте файл. Потрібно надати облікові дані лише один раз після зазначених змін.


це ідеально працює, ти врятував мої години, тепер я можу зосередитися на своїй роботі, дякую, брат.
Мухаммед Суфіан

9

Використовуйте наступну команду, щоб збільшити період очікування, щоб ви могли певний час ввести пароль

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

Я використовував його для Bitbucket і GitHub, він працює для обох. Єдине, що вам потрібно зробити - 3600це за лічені секунди. Збільште його в будь-якій мірі, яку вам захочеться. Я змінив його 259200приблизно на 30 днів. Таким чином я повторно вводите свій пароль кожні 30 днів.


1
Гаразд, я виявив, що це не зберігається після перезавантаження, тому вам все одно потрібно ввести пароль після перезавантаження, незалежно від таймауту ...
Ben Winding

Це хороший спосіб заробити кеш :) Принаймні заощадив мій час. Спасибі
ChikuMiku

@BenWinding, оскільки він зберігає облікові дані в пам'яті.
z3dd

5

Я думаю, ви вирішили свою проблему, але я не бачу рішення, яке допомогло мені, тому ось воно.

Введіть термінал:

echo "" > ~/.ssh/known_hosts

Це видалить ваш known_hostsфайл, і вам доведеться додати кожен хост, який ви використовували та підключили, але це вирішило проблему.


1
cat /dev/null > ~/.ssh/known_hostsзробимо те саме.
Олов'яний чоловік

5
> ~/.ssh/known_hostsще коротше :)
Collin Allen

rm ~ / .ssh / known_hosts теж повинен виконувати роботу. Я б радив проти цього.
orkoden

3
Якщо вам потрібно видалити хост із ~ / .ssh / known_hosts, є менш впливовий спосіб, ніж витирання файлу. ~ / .ssh / known_hosts - це лише текстовий файл, і якщо ви можете знайти хостів, що порушують файл, ви можете просто видалити їх рядки. Ви можете створити резервну копію файлу, перш ніж редагувати його. Якщо у вас є лише кілька записів у файлі, його витирання може бути не поганою ідеєю. Я працюю на багатьох серверах, тому в моїх ~ / .ssh / known_hosts є сотні записів, і я не зовсім готовий видалити їх, щоб видалити кілька записів.
Тім Стюарт

3
@papan Це не заважає git запитати мене про свій пароль!
ІгорГанапольський

5

Я відчуваю, що відповідь, яку надає static_rtti, є певним в певному сенсі. Я не знаю, чи це було доступно раніше, але інструменти Git тепер забезпечують зберігання даних.

Режим кешу

$ git config --global credential.helper cache

Використовуйте режим "кеш", щоб зберігати облікові дані в пам'яті протягом певного періоду часу. Жоден з паролів ніколи не зберігається на диску, і вони видаляються з кеша через 15 хвилин.

Режим зберігання

$ git config --global credential.helper 'store --file ~/.my-credentials'

Використовуйте режим "зберігання", щоб зберегти облікові дані в текстовому файлі на диску, і вони ніколи не закінчуються.

Я особисто використовував режим магазину . Я видалив своє сховище, клонував його, а потім довелося один раз ввести свої облікові дані.

Довідка: 7.14 Інструменти Git - Зберігання даних


Для Windows credential.helper cacheНЕ працює. Це повинно бути git config --global credential.helper wincred.
Пауло Мерсон

Збереження його спрацювало, і тепер це дозволяє мені здійснювати зміни, не вимагаючи пароля весь час, ви рятувальник!
g4ost

У Linux це зробило роботу для мене git config --local credential.helper store. У моєму випадку я перебуваю над HTTPS, таким чином я лише один раз набираю ім’я користувача / пароль, після чого мої облікові дані повторно використовуються з ~ / .git-облікових даних
CCarlos

3

Відповідь orkoden щодо використання брелка з Git у вашому терміналі була неповною і викликає помилки. Це те, що ви повинні зробити, щоб зберегти ім'я користувача та пароль, які ви вводите в термінал у вашій брелоку:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

Потім введіть

git config --global credential.helper osxkeychain

Якщо ви вже виконали частину з конфігурацією Git перед тим, як згорнутись, це не проблема; це спрацює.


1
Що робити, якщо я в Linux.
ІгорГанапольський

3

Як сказано вище static_rtti, зміни

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

до

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

Я сам змінив https.git / config файл на ssh, але він все ще не працював. Потім я побачив , що ви повинні змінити github.comдо git@github.com. Хороший спосіб отримати справжню правильну URL-адресу - це перейти на сторінку проекту та натиснути це:

Змініть HTTPS на SSH, щоб отримати правильну URL-адресу

Потім додайте цю URL-адресу у файл конфігурації.


У мене це вже в моєму конфігураційному файлі config, що ще я повинен перевірити?
cyber8200

Ви також змінили його на github.com?
CheesusCrust

3

У підсистемі Windows для Linux (WSL) це єдине рішення, над яким я знайшов роботу:

eval `ssh-агент ' ; ssh-add ~/.ssh/id_rsa

Виникла проблема з тим, що ssh-агент не був належним чином зареєстрований у WSL.


Був дурним, але це вирішило мою проблему.
Нам Кім

3

Якщо ви хочете відмовити Git від того, щоб він завжди просив вас ввійти в систему вашого сховища GitHub, це легко зробити.

Використання SSH замість HTTPS

Ви можете оновити вихідне джерело за допомогою SSH замість HTTPS "

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

Налаштуйте Git для зберігання пароля та імені користувача

Ось як можна змусити Git зберігати ім’я користувача та пароль:

git config --global credential.helper store

Далі збережіть ім’я користувача та пароль для сеансу:

git config --global credential.helper cache

2

Я погоджуюся з "codehugger" і використовуючи інструкцію "orkoden", вона працювала для мене - в NetBeans 7.3 - коли ви клацніть правою кнопкою миші на файл і виберіть контекстне меню - push - відкриється вікно "натиснути на віддалений" - є два Варіанти тут:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Як бачите, різниця - це параметр початку в URL-адресі - ви не хочете вибирати цей параметр (1), який ви хочете перевірити варіант (2), і це працює для мене просто чудово.


2

Крок 1. Перевірте свою поточну конфігурацію

cat .git/config

Ти отримаєш:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

Крок 2: видаліть віддалене походження

git remote rm origin

Крок 3. Додайте назад віддалене походження за допомогою свого імені користувача та пароля

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Після того, як ви знову додасте віддалене походження, вам також потрібно вирівняти свої гілки віддаленими та локальними - приблизно так: git branch --set-upstream master origin/master
Річард Боун

2

Якщо Git пропонує вам ім'я користувача та пароль кожен раз, коли ви намагаєтесь взаємодіяти з GitHub, ви, ймовірно, використовуєте URL-адресу клонування HTTPS для вашого сховища.

Використання віддаленої URL-адреси HTTPS має деякі переваги: ​​налаштувати його простіше, ніж SSH, і зазвичай працює через суворі міжмережеві екрани та проксі. Однак він також пропонує вам вводити свої дані GitHub кожного разу, коли ви витягуєте або натискаєте сховище.

Ви можете налаштувати Git для зберігання вашого пароля. Для Windows :

git config --global credential.helper wincred

2

Під керуванням macOS Cataline 10.15 метод кешування брелоків не працював для мене. І я хотів би використовувати https://НЕssh

Ось що для мене спрацювало:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Це має працювати і на GitLab

Переконайтесь, що ім’я користувача містить адресу електронної пошти, щоб видалити @emailчастину, або ви отримаєте повідомлення про помилку URL using bad/illegal format or missing URL.

Сподіваюся, це допомагає!


Це ТІЛЬКЕ рішення, яке працювало на мене. ваше_гіт_користувач було критичним. Насправді не потрібно було ставити: your_git_password. На даний момент, хоча він все-таки просив "пароль", тепер він прийме пароль облікового запису.
kbulgrien

1

Існують різні види аутентифікації залежно від вашої конфігурації. Ось декілька:

  1. git credential-osxkeychain.

    Якщо ваш обліковий запис недійсний, видаліть його:

      git credential-osxkeychain erase
    

    або:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Тож Git знову не запитає у вас дозволу брелока. Потім налаштуйте його ще раз.

    Див.: Оновлення облікових даних з брелока OS X на GitHub

  2. Ваш ключ SSH RSA.

    Для цього вам потрібно порівняти ваш ключ SSH з тим, що ви додали, перевірити ssh-add -L/ ssh-add -lчи використовуєте правильну особу.

  3. Аутентифікація HTTPS (якщо ви використовуєте httpsзамість sshпротоколу).

    Використовуйте ~/.netrc( %HOME%/_netrcу Windows) для надання своїх облікових даних, наприклад

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

Дізнайтеся більше: синхронізація з GitHub при переливанні стека.




1

Якщо ви використовуєте Windows, і це несподівано почало відбуватися в небі на GitHub, можливо, це пов'язано з недавньою підтримкою відключення GitHub для застарілих криптографічних алгоритмів 2018-02-22, і в цьому випадку рішенням є просто завантажити та встановити найновіша версія або повного Git для Windows, або просто диспетчера сертифікатів Git для Windows .


0

Рішення Microsoft Stack (Windows та Azure DevOps)

Спочатку відкрийте .git/configфайл, щоб переконатися, що адреса виглядає так:

protocol://something@url

Напр. .Git / config для Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

Якщо проблема все ще не вдається, відкрийте диспетчер облікових записів Windows , натисніть на безпечну скриньку під назвою Windows Credentials та видаліть усі облікові дані, пов’язані з git.

Тепер наступного разу, коли ви ввійдете в git, він більше не піде.


0

Якщо у вас налаштований агент SSH, ви також можете додати це до свого, ~/.gitconfigщоб змусити git використовувати SSH для всіх репортажів GitHub, а не HTTPS:

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(Якщо ви здебільшого працюєте з публічними репортажами, ви також можете використовувати їх, pushInsteadOfа не insteadOfчитати з публічного репо, можна без автентифікації).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.