Разрешения 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 и т.д.
Ответ 2
Существует ошибка с cygwin 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
Ответ 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.
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. Что сработало для меня:
- Установите последнюю версию 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 → Настройки → "Редактировать переменные среды системы"
- На вкладке "Дополнительно" нажмите "Переменные среды..."
- Под Системными Переменными отредактируйте "Путь".
- Выберите "C:\Program Files\OpenSSH\bin" и "Move Up", чтобы он появился сверху.
- Нажмите ОК
- Перезапустите консоль, чтобы применить новые переменные среды.
Ответ 24
Моя система немного запуталась с bash/cygwin/git/msysgit/возможно-ещё...
chmod
не влиял ни на ключ, ни на файл config
.
Тогда я решил подойти к нему из Windows, который работал.
- Щелкните правой кнопкой мыши файл, разрешение которого необходимо исправить.
- Выберите
Properties
. - Выберите вкладку "
Security
". - Нажмите
Advanced
внизу. - Нажмите
Change
, рядом с Owner
рядом с верхней частью. - Введите "My-Awesome-Username" (очевидно, измените его на свое текущее имя пользователя Windows) и нажмите "
Check Names
, а затем " OK
. - В разделе
Permission entries:
выделите каждого пользователя, который не является "My-Awesome-Username", и выберите " Remove
. Повторяйте это, пока "My-Awesome-Username" не останется единственным. - Выберите "My-Awesome-Username" и нажмите "
Edit
ниже. - Убедитесь, что для
Type:
вверху установлено значение " Allow
, а затем установите флажок " Full control
. -
Хит OK
, Apply
, OK
, OK
.
-
Попробуйте еще раз...
Кажется, иногда mock-bash не может контролировать владельца файла. Это особенно странно, так как он генерируется из скрипта mock-bash. Пойди разберись.