Windows SSH: дозволи для приватного ключа занадто відкриті


101

У тесті для мене тестування OpenSSH 7.6 встановлена ​​в Windows 7. Клієнт і сервер SSH працюють чудово, поки я не спробував отримати доступ до одного зі своїх вікон AWS EC2 з цього вікна.

Здається, мені потрібно змінити дозвіл на файл приватного ключа. Це можна легко зробити на unix / linux за допомогою chmodкоманди.

А що з вікнами?

private-key.ppm копіюється безпосередньо з AWS, і я думаю, що дозвіл теж.

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh ubuntu@192.168.0.1 -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

Ви спробували змінити ACL?
Ігнасіо Васкес-Абрамс

1
Ваш приватний ключ насправді знаходиться в кореневому шляху C: \? Я можу зрозуміти, чому він скаржиться, як зазвичай речі на C: \ доступні всім. Ви спробували перенести його в папку, до якої маєте доступ лише ви як користувач (наприклад, C: \ Users \ username \ desktop) і побачите, чи з’являється це повідомлення?
Дарій

@Darius, так, так і є. Коли ви копіюєте файл з unix / linux у Windows, дозвіл також копіюється. Мені потрібно це змінити, але не знаю, як це зробити на Windows. Це можна легко зробити на unix / linux командою chmod.
Сабріна

@ IgnacioVazquez-Abrams, ACL? Що це за ACL?
Сабріна

1
@Sabrina Або ви використовуєте команду icacls для зміни дозволу, або просто клацніть правою кнопкою миші на приватному ключі та виберіть "Властивості" та перевірте на вкладці "Безпека". І переконайтеся, що він доступний лише вам / тому, хто повинен мати доступ до приватного ключа. Якщо "Користувачі" мають доступ до читання - означає, що кожен, хто має доступ до системи, може прочитати цей приватний ключ.
Дарій

Відповіді:


118

Ви знаходите файл у Windows Explorer, клацніть на ньому правою кнопкою миші та вибираєте "Властивості". Перейдіть на вкладку "Безпека" і натисніть "Додатково".

Змініть власника до вас, відключіть спадщину та видаліть усі дозволи. Потім надайте собі "Повний контроль" і збережіть дозволи. Тепер SSH більше не буде скаржитися на занадто відкритий дозвіл файлів.

Це повинно виглядати так:

введіть тут опис зображення


2
Я просто хотів би додати 1) Цей метод працює на моєму вікні Windows 10 ( 10.0.17134.191) з версією Cygwin CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42та ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4та 2) Дякую! @iBug!
atreyu

Якщо ключовий файл знаходиться на накопичувачі / Flash диску, ця вкладка "Захист" недоступна!
Ділан Б

@DylanB Чому ви поставили облікові дані на знімному диску? (Насправді ця вкладка доступна лише у файлових системах NTFS - ви можете легко відформатувати свій диск у NTFS).
iBug

11
Насправді я це зробив, і він все ще скаржиться, що дозволи 0777 занадто відкриті.
Аарон Брамсон

10
Чому це так складно у Windows, хтось може просто додати команду --ignore-stupid-rule?
Ліам Мітчелл

21

Ключі повинні бути доступні лише тому користувачеві, якому вони призначені, і жоден інший обліковий запис, послугу чи групу.

  • GUI:
    • [Файл] Властивості - Безпека - Додатково
      1. Встановити власника для користувача ключа
      2. Видаліть усіх користувачів, груп та служб, за винятком користувача ключа , у розділі Дозволи на запити
      3. Встановіть для користувача ключа повний контроль


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%

Що робити, якщо власник насправді є групою? У моєму випадку у мене є власник файлу, network serviceтому Cygwin вважає, що дозвіл є 0770 замість 0700.
hyspace

Файл повинен належати користувачеві та групі, а не лише групі. Групові дозволи - це 3-й вісімковий [користувач - 2-й] у чотирьох восьмеричних специфікаціях, а SSH-ключі не можуть бути доступними для груп або інших осіб
JW0914,

Це справа Unix. У Windows network serviceможе бути власник файлу, і це група
hyspace

Cygwin дозволяє функцію POSIX API у Windows, але він все ще працює за правилами нативних програм на базі UNIX (отже, дозволу на 3 та 4 вісімки в налаштуваннях UGO). Незважаючи на те, що ви можете відкрити проблему на GitHub від Microsoft Win32-OpenSSH, оскільки ключі SSH повинні бути груповими та іншими недоступними , оскільки право власності в описаному вами спосіб, ймовірно, не підтримується. Краще відповідати нормі програми, ніж намагатися налаштувати її [ймовірно], що не підтримується.
JW0914

1
це має бути правильна відповідь. Дякуємо за варіанти CLI. Графічний інтерфейс завжди всмоктується у корпус Windows.
shyammakwana.me

10

Окрім відповіді, наданої ibug. Оскільки я використовував систему ubuntu всередині Windows, щоб запустити команду ssh. Це все ще не працювало. Так я і зробив

sudo ssh ...

і тоді це спрацювало


sudoне слід використовувати для відкриття сеансу SSH, оскільки це загроза безпеці. Єдиний раз (принаймні, про що мені відомо) обліковий запис кореня повинен бути використаний для відкриття сеансу SSH - це для однокористувацьких систем (тобто зазвичай вони знаходяться в ОС OpenWrt, DD-WRT тощо) та інших вбудованих системах ) . Ключі SSH повинні бути доступні лише користувачеві, для якого вони є, і жоден інший обліковий запис, послугу чи групу.
JW0914

@ JW0914 LOL У мене є однокористувацький сервер Debian, і єдиний користувач (логін) - root. Я не думаю, що додатковий некористувальний користувач корисний, оскільки це мій особистий сервер, і я входжу лише під час виконання робіт з обслуговування.
iBug

@iBug Будь ласка, перечитайте мій коментар, оскільки, здається, ви цілком пропустили друге речення ...
JW0914

5

У мене була така ж проблема, і вона, схоже, пов’язана з версією SSH, яку ви працюєте.

Якщо я набираю

where ssh

Я отримав...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

Коли я біжу ssh -Vв обох місцях, я отримую

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

... відповідно

Отже, коли я запускаю sshз каталогу git / bin, він працює добре і не скаржиться на дозволи, але запускаючи той самий командний рядок, використовуючи попередню установку SSH, він повертається з цим.

Load key "t:\\mykeys\\rich-private.ppk": invalid format
banana@127.0.0.127: Permission denied (publickey).

пс. дозволи на файл - це лише повний доступ для мене, і більше нічого.


OpenSSH не слід встановлювати в каталог Windows з цілого ряду причин, з безпеки, тому що це є великим незручністю, якщо потрібно виправити пошкоджену директорію Windows через DISMабо за допомогою параметра Скидання (що було вдосконалено для використання каталогу WinSxS проти повернення до оригіналу install.esd) .
JW0914

Це те, що мені допомогло, я ніколи не
запускав

Це також було виправданням для мене. Здається, що зараз Windows 10 Pro вбудовує стильну версію opensh. Мене змусили видалити папку C: \ Windows \ System32 \ OpenSSH та додати git's ssh.exe до PATH.
Шукри Адамс

Це "виправлено" це для мене, використовуючи C: \ Program Files \ Git \ usr \ bin \ ssh.exe працює як C: \ Windows \ System32 \ OpenSSH \ ssh.exe не робить
smartins

3

Вам потрібно jsut 2 речі:

1) Вимкнути спадщину введіть тут опис зображення

2) Перетворення успадкованих дозволів у явні дозволи введіть тут опис зображення

3) Видалити групу користувачів введіть тут опис зображення

4) У вас виявиться, що користувачі не можуть отримати доступ до приватних файлів, цього має бути достатньо, щоб додати id_rsa. введіть тут опис зображення


2

У мене була схожа проблема, але я працював і не маю можливості змінювати дозволи на файл на своєму робочому комп'ютері. Що потрібно зробити, це встановити WSL, а потім скопіювати ваш ключ у приховану директорію ssh у WSL:

cp <path to your key> ~/.ssh/<name of your key>

Тепер ви маєте змогу нормально змінювати дозволи.

sudo chmod 600 ~/.ssh/<your key's name>

Потім ssh за допомогою WSL:

ssh -i ~/.ssh/<name of your key> <username>@<ip address>


2

Використовуйте команду нижче на вашому ключі, вона працює у Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"

1

Ви можете використовувати icacls у Windows замість chmod для налаштування дозволу на файл. Щоб надати поточному користувачеві дозвіл на читання та видалити все інше,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"

0

Це лише сценарій версії відповіді CLI @ JW0914, тому зверніть його насамперед. Крім того, це мій перший сценарій PowerShell, тому пропозиції вітаються.

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned


# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path C:\DevContainerHome\.ssh -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant %username%:F
  & icacls $key  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}


0

Я користувач Window, використовуючи bash Windows і виконую всі кроки для встановлення дозволу за допомогою GUI Windows, і він все ще не працює, і він скаржиться:

Permissions 0555 for 'my_ssh.pem' are too open.
It is required that your private key files are NOT accessible by others.

Я додав sudoв передній частині команди ssh і він просто працює. Сподіваюся, що це корисно для інших.


Але ви входите в систему як сервер або як root?
G-Man каже: "Відновіть Моніку"

Я запускаю термінал Wash bash як сам, але я робив "Запуск як адміністратор", коли запускаю Bash.
Алекс Рамзес

-1

Відповідь iBug працює чудово! Ви можете слідувати за цим і позбутися цього питання.

Але є кілька речей, які потрібно усунути, коли я стикався з проблемами під час налаштування дозволів, і мені знадобилося кілька хвилин, щоб розібратися в проблемі!

Після відповіді iBug ви видалите всі дозволи, але як встановити дозвіл Повного контролю для себе? ось де я спочатку застряг, бо не знав, як це зробити.

Після відключення спадкування ви зможете видалити всіх дозволених користувачів або груп.

Колись зробив це,

Натисніть Addі натисніть Set a Principalпотім введіть Systemі Administratorsі your email addreddв поле в нижній частині натиснітьcheck names .

Він завантажить ім'я, якщо користувач існує. Потім натисніть OK> Тип Allow> Основні дозволи Full Control>Okay

Це дозволить налаштувати дозвіл на повний контроль для системи, адміністраторів та вашого користувача.

Після цього спробуйте ssh за допомогою цього ключа. Це слід вирішити зараз.

У мене була така ж проблема, і я вирішив це за допомогою цього методу. Якщо є якийсь користувач або група з таким ім'ям, він завантажить це.

-Скриншоти-

Записи дозволу Виберіть головного / Виберіть користувача або групи

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.