Права доступа с закрытым ключом SSH с использованием Git GUI или ssh-keygen слишком открыты - PullRequest
241 голосов
/ 12 октября 2009

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

Это на окнах

У меня есть cygwin + git и msysgit.

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

  • OpenSSH
  • Использовать Git из командной строки Windows

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

  • приглашение Windows cmd
  • 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 не делает: альтернативный текст http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

Есть идеи о том, как я могу исправить эти разрешения?

Ответы [ 24 ]

356 голосов
/ 13 октября 2009

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

cd ~/.ssh
chmod 700 id_rsa

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

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

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

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

74 голосов
/ 17 мая 2013

В cygwin's chmod есть ошибка, обратитесь к:

https://superuser.com/questions/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected

chgrp -Rv Users ~/.ssh/* 
chmod -vR 600 ~/.ssh/id_rsa
17 голосов
/ 26 июня 2012

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

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

CYGWIN

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

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

13 голосов
/ 17 июня 2011

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

  1. Копировать c:\cygwin\bin\cyg* (~ 50 файлов) в c:\Program Files\Git\bin\
  2. копия c:\cygwin\bin\ssh.exe в c:\Program Files\Git\bin\ (перезапись)
  3. Создать файл 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"
    
  4. (необязательно) Используйте ssh -v git@github, чтобы увидеть отлаженное соединение.

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

Справочная информация. Общая проблема заключается в комбинации этих двух:

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

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

  1. В проводнике Windows щелкните правой кнопкой мыши свой файл id_rsa и выберите Свойства
  2. Выберите вкладку «Безопасность» и нажмите «Редактировать ...»
  3. Установите флажок Запретить рядом с Полное управление для всех групп, КРОМЕ Администраторов
  4. Повторите команду Git
6 голосов
/ 08 марта 2014

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

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

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

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

Тогда я мог бы успешно изменить разрешения с помощью chmod 400 и выполнить команду git push.

4 голосов
/ 07 июня 2012

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

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

chmod og-r *filename.pem*

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

4 голосов
/ 19 июля 2013

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

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

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

Нажмите кнопку ОК и сохраните до завершения.

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

3 голосов
/ 23 октября 2014

Я решаю это работает:

chmod 400 ~/.ssh/id_rsa

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

2 голосов
/ 07 апреля 2010

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

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

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

...