Разрешения закрытого ключа 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 (после большого разочарования):
- скопировать
c:\cygwin\bin\cyg*
(~50 файлов) кc:\Program Files\Git\bin\
- скопировать
c:\cygwin\bin\ssh.exe
toc:\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 git@github
чтобы увидеть связь отлажена.- попробуйте нажать!
предпосылки: общая проблема сочетание этих двух:
- ошибка: mingw32 видит все файлы как 644 (Другие/читаемые группой), и ничто из того, что я пробовал в mingw32, cygwin или Windows, не могло это исправить.
- версия SSH mingw32 не позволит этого для закрытых ключей (как правило, хорошая политика на сервере).
для Windows 7 с помощью Git found здесь (он использует MinGW, а не Cygwin):
- в проводнике windows щелкните правой кнопкой мыши файл id_rsa и выберите Свойства
- выберите вкладку Безопасность и нажмите кнопку Редактировать...
- установите флажок запретить рядом с полным контролем для всех групп, кроме администраторов
- повторите команду 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 не изменит разрешения файла из командной строки. Таким образом, это также на самом деле сделано - вместо использования захватывающих обходов работы, которые могут иметь странные последствия.
после того, как недавно столкнулся с проблемой, и это один из лучших результатов 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 это сработало для меня:
установить cygwin.
замените msysgit ssh.exe с ssh cygwin.исполняемый.
используя cygwin bash, chmod 600 файл закрытого ключа, который был "id_rsa" для меня.
Если он все еще не работает, перейдите в Панель управления - > Свойства системы - > Дополнительно - > Переменные среды и добавьте следующую переменную среды. Затем повторите шаг 3.
Значение Переменной
С Cygwin sbmntsec
Я смог исправить это, сделав две вещи, хотя вам, возможно, не придется делать Шаг 1.
копировать из cygwin ssh.exe и все cyg*.dll в каталог bin Git (это может быть не обязательно, но это шаг, который я сделал, но это само по себе не исправить)
-
выполните следующие действия: 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/
- добавить ключ:
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 я был запущен и запущен.
вы скопировали файл ключа с другой машины?
Я только что создал 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. Что сработало для меня:
- установите последнюю версию OpenSSH из http://www.mls-software.com/opensshd.html
- где.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 является вторым в пути, поэтому он не будет выполняться.
изменить порядок:
- Правой Кнопкой - > "Конфигурация Windows" - > "редактировать системные переменные среды"
- на вкладке " Advance "нажмите кнопку" Переменные среды..."
- в разделе системные переменные изменить "путь".
- выбрать "C:\Program Files\OpenSSH\bin" и "переместить вверх", чтобы он появился сверху.
- нажмите OK
- перезагрузите консоль так что могут применяться новые переменные среды.