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

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

это на windows

у меня есть 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:usersben папка, которая используется msysgit. Я подозреваю, что cygwin работает, потому что.папка СШ находится в другом месте, но я не уверен почему?--10-->

в 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

дает те же права, что до.

обновление:

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

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

23 ответов


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

cd ~/.ssh
chmod 700 id_rsa

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

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

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

отредактировано: также только что нашел эту ссылку через Google -- исправление "предупреждение: незащищенный файл закрытого ключа!"на Linux хотя он нацелен на linux, это может помочь, так как мы говорим о разрешениях liunx и тому подобное.


существует ошибка с chmod cygwin, пожалуйста, обратитесь к:

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

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

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

CYGWIN

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

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


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

  1. скопировать c:\cygwin\bin\cyg* (~50 файлов) к c:\Program Files\Git\bin\
  2. скопировать c:\cygwin\bin\ssh.exe to 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. попробуйте нажать!

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

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

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

  1. в проводнике windows щелкните правой кнопкой мыши файл id_rsa и выберите Свойства
  2. выберите вкладку Безопасность и нажмите кнопку Редактировать...
  3. установите флажок запретить рядом с полным контролем для всех групп, кроме администраторов
  4. повторите команду Git

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

- r--r----- 1 alex None 1766 Mar 8 13: 04 /главная/Алекс/.ssh / id_rsa

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

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

тогда я мог бы успешно изменить разрешения с помощью chmod 400, и запустить ГИТ толкай.


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

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

chmod og-r *filename.pem*

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


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

щелкните правой кнопкой мыши файл>свойства > вкладка безопасность>кнопка Дополнительно>Изменить разрешения

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

нажмите OK и сохраните до конца.

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


Я решаю его запуск:

chmod 400 ~/.ssh/id_rsa

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


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

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


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

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

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


Я сейчас играю с Git 1.6.5, и я не могу воспроизвести вашу настройку:

Administrator@WS2008 /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

Administrator@WS2008 /k/git
$ git clone git@github.com: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.

Administrator@WS2008 /k/git
$ ssh git@github.com
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
  • пользователь: администратор
  • окружающая среда vars:
    • PLINK_PROTOCOL=ssh
    • HOME= / c / профили / главная

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


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

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

  1. установить cygwin.

  2. замените msysgit ssh.exe с ssh cygwin.исполняемый.

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

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

    Значение Переменной
    С Cygwin sbmntsec


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

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

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

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

хост heroku.com
Имя heroku.com
Порт 22
IdentitiesOnly да
IdentityFile ~/.ssh / id_heroku
Параметр tcpkeepalive да
Пользователь brandon

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

  1. добавить ключ:
    heroku ключи: добавить ~/.ssh / id_heroku.паб

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


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


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

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

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

ssh-keygen -t rsa

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

cat ~/.ssh/id_rsa.pub | pbcopy

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

Name: My new public key
Key: <PASTE>

выйдите из терминала и перезапустите новый.

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


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


тип терминала:

chmod -Rf 700 ~/.ssh/

и повторите попытку.


вы скопировали файл ключа с другой машины?

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

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

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


после обновления моей установки 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

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


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

cd ~/.ssh
chmod 700 id_rsa.pub

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


У меня была такая же проблема в Windows 10, где я пытался SSH в Бродячую коробку. Это похоже на ошибку в старой версии 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. на вкладке " Advance "нажмите кнопку" Переменные среды..."
  3. в разделе системные переменные изменить "путь".
  4. выбрать "C:\Program Files\OpenSSH\bin" и "переместить вверх", чтобы он появился сверху.
  5. нажмите OK
  6. перезагрузите консоль так что могут применяться новые переменные среды.