Разрешения Private Key SSH с использованием Git GUI или ssh-keygen слишком открыты

Недавно мне не удалось клонировать или нажимать на github, и я пытаюсь найти основную причину.

Это на окнах

У меня есть cygwin + git, а также msysgit.

Установлен Msysgit со следующими параметрами:

  • OpenSSH
  • Используйте git из командной строки Windows

Это дает мне 4 среды, чтобы попытаться использовать git в:

  • Windows cmd prompt
  • Powershell
  • Git Bash
  • Cygwin

Как-то мне удалось попасть в такое положение, когда я пытаюсь клонировать репозиторий с помощью msysgit, cmd.exe или Powershell, я получаю следующую ошибку:

> Initialized empty Git repository in
> C:/sandbox/SomeProject/.git/
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @    WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions 0644 for
> '/c/Users/Ben/.ssh/id_rsa' are too
> open. It is recommended that your
> private key files are NOT accessible
> by others. This private key will be
> ignored. bad permissions: ignore key:
> /c/Users/Ben/.ssh/id_rsa Permission
> denied (publickey). fatal: The remote
> end hung up unexpectedly

Это использование .ssh-папки в папке c:\users\ben \, которая используется в msysgit. Я подозреваю, что cygwin работает, потому что папка .ssh находится в другом месте, но я не уверен, почему

В git Bash я проверяю разрешения:

$ ls -l -a ~/.ssh

Что дает мне:

drwxr-xr-x    2 Ben      Administ        0 Oct 12 13:09 .    
drwxr-xr-x   34 Ben      Administ     8192 Oct 12 13:15 ..    
-rw-r--r--    1 Ben      Administ     1743 Oct 12 12:36 id_rsa
-rw-r--r--    1 Ben      Administ      399 Oct 12 12:36 id_rsa.pub    
-rw-r--r--    1 Ben      Administ      407 Oct 12 13:09 known_hosts

Эти разрешения, по-видимому, слишком расслаблены. Как они это сделали, я понятия не имею.

Я могу попытаться изменить их...

$ chmod -v -R 600 ~/.ssh

который говорит мне:

mode of `.ssh' changed to 0600 (rw-------)
mode of `.ssh/id_rsa' changed to 0600 (rw-------)
mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------)
mode of `.ssh/known_hosts' changed to 0600 (rw-------)

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

$ ls -l -a ~/.ssh

дает те же разрешения, что и раньше.

UPDATE:

Я попытался исправить разрешения для этих файлов в cygwin, и cygwin правильно сообщает их разрешения, gitbash: alt text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

Любые идеи о том, как я могу действительно исправить эти разрешения?

Ответ 1

Вы изменили разрешения на весь каталог, который я согласен с Splash - плохая идея. Если вы помните, какие исходные разрешения для каталога есть, я бы попытался их вернуть, а затем выполните следующие

cd ~/.ssh
chmod 700 id_rsa

внутри папки .ssh. Это установит файл id_rsa в rwx (чтение, запись, выполнение) только для владельца (вас) и нулевого доступа для всех остальных.

Если вы не можете вспомнить исходные настройки, добавьте нового пользователя и создайте набор ключей SSH для этого пользователя, создав таким образом новую .ssh-папку, которая будет иметь разрешения по умолчанию. Вы можете использовать эту новую .ssh-папку в качестве ссылки для разрешений на reset вашу папку и файлы .ssh для.

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

Отредактировано: Также вы нашли эту ссылку через Google - Фиксация "ПРЕДУПРЕЖДЕНИЕ: НЕПРЕРЫВНЫЙ ЧАСТНЫЙ ФАЙЛ КЛЮЧА!" в Linux Хотя он предназначен для Linux, это может помочь, так как мы говорим о правах доступа liunx и т.д.

Ответ 3

Для систем * nix очевидное исправление chmod 600 id_rsa ofc, но на окнах 7 мне пришлось немного ударить головой о стену, но затем я нашел магическое решение:

перейдите в раздел "Мой компьютер" / "Правый клик" / "Свойства" / "Расширенные параметры системы/переменные среды" и УДАЛИТЬ переменную (возможно, как из системной, так и из пользовательской среды):

CYGWIN

В принципе, это недостаток в mingw32, используемый двоичным файлом git windows, все файлы 644 и все папки 755 всегда. Удаление переменной окружения не изменяет это поведение, но оно явно говорит ssh.exe игнорировать проблему. Если вы установите правильные разрешения для вашего id_rsa через настройки безопасности исследователей (там действительно нет необходимости иметь там какого-либо другого пользователя, а не "всех", а не "администраторов", а не "системы"., вы все равно будете в безопасности.

Теперь, почему mingw32, другая система, чем cygwin, сделает любое использование переменной среды CYGWIN, вне меня. Похож на ошибку.

Ответ 4

Я нахожусь на XP, и это позволило Git Bash связываться с Github (после большого разочарования):

  • скопировать c:\cygwin\bin\cyg* (~ 50 файлов) на c:\Program Files\Git\bin\
  • скопировать c:\cygwin\bin\ssh.exe в c:\Program Files\Git\bin\ (переписать)
  • Создайте файл c:\Documents and Settings\<username>\.ssh\config, содержащий:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile "/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa"
    
  • (необязательно) Используйте ssh -v [email protected], чтобы увидеть отлаженное соединение.

  • Попробуйте нажать!

Фон: общая проблема - это комбинация этих двух:

  • BUG: mingw32 видит все файлы как 644 (другие/читаемые группой), и ничего, что я пытался в mingw32, cygwin или Windows, не смог исправить его.
  • Версия mingw32 SSH не позволит это для закрытых ключей (как правило, хорошая политика на сервере).

Ответ 5

В Windows 7 с помощью Git найдено здесь (он использует MinGW, а не Cygwin):

  • В проводнике Windows щелкните правой кнопкой мыши файл id_rsa и выберите "Свойства"
  • Выберите вкладку "Безопасность" и нажмите "Изменить"...
  • Установите флажок "Запретить" рядом с "Полный доступ" для всех групп. ИСКЛЮЧИТЕ "Администраторы"
  • Повторите команду Git

Ответ 6

Изменение прав доступа к файлам из свойств, отключение наследования и запуск chmod 400 не помогло мне. Разрешения для моего файла закрытого ключа:

-r - r ----- 1 alex None 1766 8 марта 13:04/home/alex/.ssh/id_rsa

Затем я заметил, что группа была None, поэтому я просто запустил

chown alex: Администраторы ~/.ssh/id_rsa

Затем я смог успешно изменить разрешения с помощью chmod 400 и запустить push git.

Ответ 7

ДЛЯ ПОЛЬЗОВАТЕЛЕЙ MAC:

Измените настройки файла пары ключей, введя его в терминал:

chmod og-r *filename.pem*

(убедитесь, что вы находитесь в правильном каталоге или в имени файла пути в команде правильно).

Ответ 8

ОК, вот как я на самом деле заставил изменения в своих файлах Windows относительно самих разрешений на Win7: Найдите свой ssh-ключ в проводнике Windows: C:\Users [your_user_name_here].ssh\id_rsa

Щелкните правой кнопкой мыши файл > Свойствa > вкладка "Безопасность" > "Дополнительно" > "Изменить разрешения"

Теперь удалите всех, которые на самом деле не являются вашим именем пользователя. Сюда входят пользователи "Администратор" и "Система". На этом этапе вы можете получить диалог о наследовании разрешений - выберите вариант, который НЕ НАЙТИ, поскольку мы хотим изменить этот файл.

Нажмите "ОК" и сохраните до конца.

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

Ответ 9

Я решаю его:

chmod 400 ~/.ssh/id_rsa

Я надеюсь помочь. Удачи.

Ответ 10

У меня была такая же проблема в Windows XP совсем недавно. Я попытался использовать chmod 700 в файле ~/.ssh/id_rsa, но он, похоже, не работал. Когда я просмотрел разрешения с помощью ls -l на ~/.ssh/id_rsa, я мог видеть, что мои эффективные разрешения все еще были 644.

Затем я вспомнил, что разрешения на окна также наследуют разрешения от папок, и папка все еще открыта для всех. Решением может быть установка разрешений для папки, но я думаю, что лучший способ - это заставить систему игнорировать наследование для этого файла. Это можно сделать, используя расширенный параметр на вкладке безопасности в свойствах файла и сняв флажок "наследовать от родительских прав..."

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

Ответ 11

После недавней проблемы с этим вопросом, и это один из лучших результатов Google, я подумал, что я включу простую работу, описанную здесь в обсуждении: http://code.google.com/p/msysgit/issues/detail?id=261#c40

Просто включает перезапись mysys ssh.exe с помощью cygwin ssh.exe

Ответ 12

Сейчас я играю с Git 1.6.5, и я не могу реплицировать вашу настройку:

[email protected] /k/git
$ ll ~/.ssh
total 8
drwxr-xr-x    2 Administ Administ     4096 Oct 13 22:04 ./
drwxr-xr-x    6 Administ Administ     4096 Oct  6 21:36 ../
-rw-r--r--    1 Administ Administ        0 Oct 13 22:04 c.txt
-rw-r--r--    1 Administ Administ      403 Sep 30 22:36 config_disabled
-rw-r--r--    1 Administ Administ      887 Aug 30 16:33 id_rsa
-rw-r--r--    1 Administ Administ      226 Aug 30 16:34 id_rsa.pub
-rw-r--r--    1 Administ Administ      843 Aug 30 16:32 id_rsa_putty.ppk
-rw-r--r--    1 Administ Administ      294 Aug 30 16:33 id_rsa_putty.pub
-rw-r--r--    1 Administ Administ     1626 Sep 30 22:49 known_hosts

[email protected] /k/git
$ git clone [email protected]:alexandrul/gitbook.git
Initialized empty Git repository in k:/git/gitbook/.git/
remote: Counting objects: 1152, done.
remote: Compressing objects: 100% (625/625), done.
remote: Total 1152 (delta 438), reused 1056 (delta 383)s
Receiving objects: 100% (1152/1152), 1.31 MiB | 78 KiB/s, done.
Resolving deltas: 100% (438/438), done.

[email protected] /k/git
$ ssh [email protected]
ERROR: Hi alexandrul! You've successfully authenticated, but GitHub does not pro
vide shell access
Connection to github.com closed.

$ ssh -v
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007

chmod не изменяет права доступа к файлам для моих ключей.

Окружающая среда:

  • Windows Server 2008 SP2 на NTFS
  • пользователь: администратор
  • Окружающая среда:
    • PLINK_PROTOCOL = SSH
    • HOME =/с/профили/дом

Обновление: Git 1.6.5.1 также работает.

Ответ 13

Это особенно актуальная проблема в Windows, где этого недостаточно, чтобы просто chmod файлы правильно. Вы должны настроить свою среду.

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

  • Установите cygwin.

  • Замените файл msysgit ssh.exe на cygwin ssh.exe.

  • Используя cygwin bash, chmod 600 - файл закрытого ключа, который для меня был "id_rsa".

  • Если он все еще не работает, перейдите в Панель управления → Свойства системы → Дополнительно → Переменные среды и добавьте следующую переменную среды. Затем повторите шаг 3.

    Переменная   Value
    CYGWIN   sbmntsec

Ответ 14

Я смог исправить это, выполнив две вещи, хотя вам, возможно, не нужно делать шаг 1.

  • скопировать из cygwin ssh.exe и всех cyg *.dll в каталог Git bin (это может быть необязательно, но это шаг, который я сделал, но это само по себе не исправляло)

    /li >
  • выполните следующие действия: http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/

    Я добавил некоторые детали в файл ~/.ssh/config:

Host heroku.com
Имя хоста heroku.com
Порт 22
Идентично только да IdentityFile ~/.ssh/id_heroku
TCPKeepAlive yes
Пользователь brandon

Мне пришлось использовать User как мой адрес электронной почты для heroku.com Примечание: это означает, что вам нужно создать ключ, я последовал за ним, чтобы создать ключ, и когда он запрашивает имя ключа, обязательно укажите id_heroku http://help.github.com/win-set-up-git/

  • затем добавьте ключ:
    ключи героя: добавить ~/.ssh/id_heroku.pub

Ответ 15

Какая уловка для меня заключалась в обновлении переменной CYGWIN с помощью: " tty nodosfilewarning". Даже не нужно было использовать chmod ключ.

Ответ 16

Не прямой ответ на основной вопрос, но на ваш вопрос о том, как работает папка cygwin... Как правило, cygwin помещает все "ваши" файлы в equiv c:\cygwin\home\username. Он обрабатывает эту папку для любых пользовательских настроек, а не для каталога пользователя Windows.

Ответ 17

Если есть причина, по которой вы хотите сохранить эту частную/открытую пару ключей (id_rsa/id_rsa.pub) или наслаждаться ударом головой по стене, я бы рекомендовал просто воссоздать их и обновить ваш открытый ключ на github.

Начните с создания резервной копии вашего каталога ~/.ssh.

Введите следующее и ответьте "y" на то, хотите ли вы писать поверх существующих файлов.

ssh-keygen -t rsa

Скопировать содержимое открытого ключа в буфер обмена. (Ниже вы должны сделать это на Mac).

cat ~/.ssh/id_rsa.pub | pbcopy

Перейдите в свою учетную запись на github и добавьте этот ключ.

Name: My new public key
Key: <PASTE>

Выход из терминала и перезапуск нового.

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

Ответ 18

Мне никогда не удалось заставить git работать полностью в Powershell. Но в оболочке git bash у меня не было никаких разрешений, и мне не нужно было устанавливать chmod и т.д. После добавления ssh в Github я был запущен.

Ответ 19

Введите терминал:

chmod -Rf 700 ~/.ssh/

И попробуйте еще раз.

Ответ 20

Скопировал ли файл ключей с другого компьютера?

Я только что создал файл id_rsa на клиентской машине, а затем вставил ключ, который я хотел. Нет разрешений. Нечего устанавливать. Это просто сработало. Он также работает, если вы используете PuTTYgen для создания закрытого ключа.

Возможно, проблема с скрытой группой, если вы копируете ее с другой машины.

Протестировано на двух машинах Windows 8.1. Использование Sublime Text 3 для копирования и вставки закрытого ключа. Используя Git Bash (Git -1.9.4-preview20140611).

Ответ 21

После обновления моей установки Cygwin до версии 2015 года (1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin) я неожиданно столкнулся с предупреждением UNPROTECTED PRIVATE KEY FILE.

Я исправил эту проблему после выполнения следующей команды:

setfacl -s u::rw-,g::---,o:--- ~/.ssh/id_rsa

(другой ответ на другой вопрос дает больше контекста)

Ответ 22

@koby ответ не работает для меня, поэтому я делаю небольшое изменение.

cd ~/.ssh
chmod 700 id_rsa.pub

Это хорошо работает для меня на Mac.

Ответ 23

У меня была такая же проблема в Windows 10, где я пытался использовать SSH в Vagrant box. Это похоже на ошибку в старой версии OpenSSH. Что сработало для меня:

  1. Установите последнюю версию OpenSSH с http://www.mls-software.com/opensshd.html.
  2. где .exe ssh

(Обратите внимание на ".exe", если вы используете Powershell)

Вы можете увидеть что-то вроде:

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\OpenSSH\bin\ssh.exe
C:\opscode\chefdk\embedded\git\usr\bin\ssh.exe

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

Чтобы изменить порядок:

  1. Щелкните правой кнопкой мыши кнопку Windows → Настройки → "Редактировать переменные среды системы"
  2. На вкладке "Дополнительно" нажмите "Переменные среды..."
  3. Под Системными Переменными отредактируйте "Путь".
  4. Выберите "C:\Program Files\OpenSSH\bin" и "Move Up", чтобы он появился сверху.
  5. Нажмите ОК
  6. Перезапустите консоль, чтобы применить новые переменные среды.

Ответ 24

Моя система немного запуталась с bash/cygwin/git/msysgit/возможно-ещё...

chmod не влиял ни на ключ, ни на файл config.

Тогда я решил подойти к нему из Windows, который работал.

  1. Щелкните правой кнопкой мыши файл, разрешение которого необходимо исправить.
  2. Выберите Properties.
  3. Выберите вкладку " Security ".
  4. Нажмите Advanced внизу.
  5. Нажмите Change, рядом с Owner рядом с верхней частью.
  6. Введите "My-Awesome-Username" (очевидно, измените его на свое текущее имя пользователя Windows) и нажмите " Check Names, а затем " OK.
  7. В разделе Permission entries: выделите каждого пользователя, который не является "My-Awesome-Username", и выберите " Remove. Повторяйте это, пока "My-Awesome-Username" не останется единственным.
  8. Выберите "My-Awesome-Username" и нажмите " Edit ниже.
  9. Убедитесь, что для Type: вверху установлено значение " Allow, а затем установите флажок " Full control.
  10. Хит OK, Apply, OK, OK.

  11. Попробуйте еще раз...

Кажется, иногда mock-bash не может контролировать владельца файла. Это особенно странно, так как он генерируется из скрипта mock-bash. Пойди разберись.