Windows SSH: разрешения для «закрытого ключа» слишком открыты

102

Я установил 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:\>
Sabrina
источник
Вы пытались изменить ACL?
Игнасио Васкес-Абрамс
1
Ваш закрытый ключ на самом деле находится в C: \ root path? Я могу понять, почему он жалуется, потому что обычно вещи в C: \ доступны каждому. Вы пытались переместить его в папку, к которой имеют доступ только вы, как пользователь (например, C: \ Users \ username \ desktop), и посмотрите, появляется ли это сообщение?
Дарий
@Darius, да, это так. Когда вы копируете файл из unix / linux в windows, разрешение копируется также. Мне нужно изменить это, но не уверен, как это сделать в Windows. Это можно легко сделать в unix / linux с помощью команды chmod.
Сабрина
@ IgnacioVazquez-Abrams, ACL? Что за ACL?
Сабрина
1
@Sabrina Либо вы используете команду icacls, чтобы изменить разрешение, либо просто щелкните правой кнопкой мыши на закрытом ключе, выберите «Свойства» и выберите вкладку «Безопасность». И убедитесь, что он доступен только вам / тому, кто должен иметь доступ к закрытому ключу. Если «Пользователи» имеют доступ для чтения - означает, что любой, кто имеет доступ к системе, может прочитать этот закрытый ключ.
Дарий

Ответы:

119

Вы находите файл в проводнике Windows, щелкните его правой кнопкой мыши и выберите «Свойства». Перейдите на вкладку «Безопасность» и нажмите «Дополнительно».

Смените владельца на вас, отключите наследование и удалите все разрешения. Затем предоставьте себе «Полный контроль» и сохраните разрешения. Теперь SSH больше не будет жаловаться на разрешение файла, слишком открытое.

Это должно выглядеть так:

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

iBug
источник
2
Я просто хотел бы добавить 1) Этот метод работает на моей 10.0.17134.191коробке Windows 10 ( ) с Cygwin ver 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!
Атрею
Если файл ключа находится на Thumb Drive / Flash диске, эта вкладка Безопасность недоступна!
Дилан Б.
@DylanB Почему вы положили учетные данные на съемный диск? (Фактически эта вкладка доступна только в файловых системах NTFS - вы можете легко отформатировать диск в NTFS).
iBug
11
На самом деле, я сделал это, и он все еще жалуется, что 0777 разрешения слишком открыты.
Аарон Брэмсон
11
Почему это так сложно в Windows, кто-то может просто добавить параметр команды --ignore-stupid-rule?
Лиам Митчелл
22

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

  • 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%
JW0914
источник
Что если владелец на самом деле группа? В моем случае у меня есть файл, которым владеет, network serviceпоэтому Cygwin думает, что разрешение 0770 вместо 0700.
hyspace
Файл должен принадлежать пользователю и группе, а не только группе. Групповые разрешения являются третьими восьмеричными [пользователь является вторым] в четырехзначной спецификации, и ключи SSH не могут быть доступными для группы или других
JW0914
Это случай Unix. В Windows network serviceможет владеть файлом и это группа
hyspace
Cygwin позволяет использовать API-интерфейс POSIX в Windows, но он по-прежнему работает по правилам собственных программ на основе UNIX (следовательно, восьмеричные разрешения 3 и 4 в настройке UGO). Хотя вы можете открыть вопрос о GitHub Microsoft Win32-OpenSSH, так как ключи SSH должны быть групповыми, а другие недоступными , владение, как вы описываете, скорее всего, не поддерживается. Лучше соответствовать нормам программы, чем пытаться настроить ее [вероятно] неподдерживаемым способом.
JW0914
1
это должен быть правильный ответ. Спасибо за варианты CLI. GUI всегда отстой в случае Windows.
shyammakwana.me
11

В дополнение к ответу, предоставленному ibug. Так как я использовал систему Ubuntu внутри Windows, чтобы запустить команду SSH. Это все еще не работало. Так я и сделал

sudo ssh ...

и тогда это сработало

Парв Шарма
источник
sudoНе следует использовать для открытия сеанса SSH, так как это угроза безопасности. Единственный раз (по крайней мере, мне известно) учетная запись root должна использоваться для открытия сеанса SSH в однопользовательских системах (т. Е. Обычно находится в ОС маршрутизатора [OpenWrt, DD-WRT и т. Д.] И других встроенных системах. ) . Ключи SSH должны быть доступны только пользователю, для которого они предназначены, и никаким другим аккаунтам, службам или группам.
JW0914
@ JW0914 LOL У меня есть однопользовательский сервер Debian, и единственный (входящий в систему) пользователь - root. Я не думаю, что дополнительный пользователь без полномочий 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).

пс. права доступа к файлу - это полный доступ для себя и больше ничего.

Rich S
источник
OpenSSH не следует устанавливать в каталог Windows по целому ряду причин, от безопасности, до того, что это создает большие неудобства, если нужно исправить поврежденный каталог Windows с помощью DISMили с помощью параметра сброса (который был улучшен для использования каталога WinSxS). против возврата к оригиналу install.esd) .
JW0914
Это то, что мне помогло, я никогда не получал версию Windows SSH для этого сценария, только Git's :(
cudacoder
Это было также исправление для меня. Похоже, Windows 10 Pro теперь включает в себя версию openssh. Я был вынужден удалить папку C: \ Windows \ System32 \ OpenSSH и добавить gsh's ssh.exe в PATH.
Шукри Адамс
Это «исправило» это для меня, с помощью C: \ Program Files \ Git \ usr \ bin \ ssh.exe работает как C: \ Windows \ System32 \ OpenSSH \ ssh.exe нет
smartins
3

Вам нужны только 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>

JKauffman
источник
2

используйте команду ниже на вашем ключе, она работает на Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Вальтер Феррао
источник
1

Вы можете использовать icacls в окнах вместо chmod для настройки прав доступа к файлам. Чтобы дать текущему пользователю разрешение на чтение и удалить все остальное,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"
manjuv
источник
1

Это всего лишь скриптовая версия ответа 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 $_
}
bbarker
источник
1

Одна строка в CMD может помочь (как описано здесь: https://serverfault.com/a/883338/550334 ), то есть добавление ключа из stdin вместо изменения разрешений:

cat /path/to/permission_file | ssh-add -k 

Чтобы проверить, был ли добавлен ключ:

ssh-add -l
majom
источник
0

Использование Mingw-w64.

Информация: http://mingw-w64.org/doku.php

Скачать с Git для Windows или напрямую.

Доступна здесь: https://github.com/mirror/mingw-w64

git clone https://github.com/mirror/mingw-w64

Он также имеет другие полезные команды Linux, такие как tarи gzip.

Даллас Кларк
источник
0

Я пользователь Windows, использую bash для Windows и выполнил все шаги, чтобы установить разрешение с помощью графического интерфейса 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 говорит: «Восстанови Монику»
Я запускаю оконный терминал bash от себя, но я запускаю «Запуск от имени администратора» при запуске Bash.
Алекс Рамзес
-1

Ответ от iBug работает отлично! Вы можете следить за этим и избавиться от этой проблемы.

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

После ответа iBug вы удалите все разрешения, но как вы установите для себя разрешение «Полный доступ»? вот где я сначала застрял, так как не знал, как это сделать.

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

Как только закончите с этим,

Нажмите на Addзатем нажмите Set a Principalзатем введите Systemи и Administratorsи your email addreddв поле внизу, затем нажмите check names.

Он загрузит имя, если пользователь существует. Затем нажмите OK> Тип Allow> Основные разрешения Full Control>Okay

Это установит разрешение «Полный доступ» для СИСТЕМЫ, Администраторов и Вашего Пользователя.

После этого попробуйте ssh, используя этот ключ. Это должно быть решено сейчас.

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

-Screenshots-

Записи разрешений Выберите принципала / выберите пользователя или группы

lazycipher
источник