Windows SSH : '개인 키'에 대한 권한이 너무 열려 있습니다


99

테스트 목적으로 Windows 7에 OpenSSH 7.6을 설치했습니다. 이 창에서 AWS EC2 상자 중 하나에 액세스하려고 시도 할 때까지 SSH 클라이언트 및 서버가 정상적으로 작동합니다.

개인 키 파일에 대한 권한을 변경해야 할 것 같습니다. 이것은 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 수정을 시도 했습니까?
— Ignacio Vazquez-Abrams

1
개인 키가 실제로 C : \ 루트 경로에 있습니까? C : \의 내용이 모든 사람이 액세스 할 수있는 것처럼 왜 불만이 나타나는지 알 수 있습니다. 사용자가 액세스 권한이있는 폴더 (예 : C : \ Users \ username \ desktop)로 이동하여 해당 메시지가 계속 나타나는지 확인한 적이 있습니까?
— 다리우스

@Darius, 그렇습니다. 파일을 unix / linux에서 windows로 복사하면 권한도 복사됩니다. 이것을 변경해야하지만 Windows에서 어떻게 해야하는지 확실하지 않습니다. chmod 명령으로 유닉스 / 리눅스에서 쉽게 수행 할 수 있습니다.
— 사브리나

@ IgnacioVazquez-Abrams, ACL? 어떤 종류의 ACL?
— 사브리나

1
@Sabrina icacls 명령을 사용하여 권한을 변경하거나 개인 키를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 "보안"탭에서 확인하십시오. 그리고 개인 키에 액세스 할 수 있어야하는 사람만이 액세스 할 수 있는지 확인하십시오. "사용자"에게 읽기 액세스 권한이있는 경우-시스템에 액세스 권한이있는 사용자는 누구나 해당 개인 키를 읽을 수 있습니다.
— 다리우스

답변:


114

Windows 탐색기에서 파일을 찾아 마우스 오른쪽 단추로 클릭 한 다음 "속성"을 선택하십시오. "보안"탭으로 이동하여 "고급"을 클릭하십시오.

소유자를 귀하에게 변경하고 상속을 비활성화하고 모든 권한을 삭제하십시오. 그런 다음 자신에게 "모든 권한"을 부여하고 권한을 저장하십시오. 이제 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 버전 OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4, 그리고 2) 감사합니다! @iBug!
— atreyu

키 파일이 Thumb Drive / Flash 디스크에 있으면 해당 보안 탭을 사용할 수 없습니다!
— Dylan B

@DylanB 왜 이동식 드라이브에 자격 증명을 넣었습니까? 실제로이 탭은 NTFS 파일 시스템에서만 사용할 수 있습니다. 드라이브를 NTFS로 쉽게 포맷 할 수 있습니다.
— iBug

11
실제로, 나는 그것을했고 여전히 0777 권한이 너무 열려 있다고 불평합니다.
— Aaron Bramson

10
Windows에서 이것이 왜 그렇게 어려운가? 누군가 --ignore-stupid-rule 명령 옵션을 추가 할 수 있습니까?
— Liam Mitchell

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 serviceCygwin이 소유 한 파일이 있으므로 권한이 0700이 아니라 0770이라고 생각합니다.
— hyspace

파일은 그룹 만이 아니라 사용자와 그룹이 소유해야합니다. 그룹 권한은 4 개의 8 진수 사양에서 3 번째 8 진수 (사용자는 2 위)이며 SSH 키는 그룹화 할 수 없으며 다른 사용자도 액세스 할 수 없습니다.
— JW0914

이것이 유닉스의 경우입니다. Windows에서는 network service파일을 소유 할 수 있으며 그룹입니다.
— hyspace

Cygwin은 Windows에서 POSIX API 기능을 허용하지만 여전히 고유 UNIX 기반 프로그램의 규칙에 따라 작동합니다 (따라서 UGO 설정에서 3 및 4 개의 8 진 권한). Microsoft의 Win32-OpenSSH의 GitHub에서 문제를 열 ​​수는 있지만 SSH 키는 그룹화되고 다른 키는 액세스 할 수 없어야하므로 설명하는 방식으로 소유권을 갖는 것은 지원되지 않을 수 있습니다. 지원되지 않는 방식으로 프로그램을 구성하는 것보다 프로그램의 표준을 따르는 것이 좋습니다.
— JW0914

1
이것은 정답이어야합니다. CLI 옵션에 감사드립니다. GUI는 항상 Windows 케이스를 빨아들입니다.
— shyammakwana.me

10

ibug에서 제공하는 답변 외에도. Windows에서 우분투 시스템을 사용하여 ssh 명령을 실행했기 때문에. 여전히 작동하지 않았습니다. 그래서 내가 했어

sudo ssh ...

그런 다음 효과가있었습니다.


sudo보안 상 위험하므로 SSH 세션을 여는 데 사용해서는 안됩니다. 유일한 시간 (제가 알고 있다는 적어도) 루트 계정이 SSH 세션을 열 활용해야한다 단일 사용자 시스템에 (즉, 일반적으로 OS의 [등 OpenWrt, DD-WRT,] 라우터의 발견 및 기타 임베디드 시스템 ) . SSH 키 는 자신이 속한 사용자 만 액세스 할 수 있어야 하며 다른 계정, 서비스 또는 그룹이 없어야합니다.
— JW0914

@ JW0914 LOL 나는 단일 사용자 데비안 서버를 가지고 있고 유일한 (로그인) 사용자는 루트입니다. 루트가 아닌 추가 사용자는 개인 서버이기 때문에 유익하지 않다고 생각하고 유지 관리 작업을 수행 할 때만 로그인합니다.
— 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

...각기

따라서 sshgit / bin 디렉토리에서 실행할 때 잘 작동하고 권한에 대해 불평하지 않지만 이전 SSH 설치를 사용하여 동일한 명령 줄을 실행하면 다시 돌아옵니다.

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

추신. 파일에 대한 권한은 나 자신을 완전히 액세스 할 수 있으며 다른 것은 없습니다.


OpenSSH는 보안을 비롯하여 전체적인 이유로 Windows 디렉토리에 설치해서는 안됩니다 DISM. 재설정 옵션을 통해 또는 WinSxS 디렉토리를 사용하도록 개선install.esd 된 손상된 Windows 디렉토리를 수정해야하는 경우 큰 불편 함이 있습니다. 원본으로 되돌리기 ) .
— JW0914

이것은, 내가이 시나리오 만 망할 놈의 :( 일에 윈도우 SSH 버전을 가진 적이 없어 나에게 도움이 무엇인가
— cudacoder

이것은 또한 나를위한 수정이었습니다. Windows 10 Pro는 이제 pooched 버전의 openssh를 번들로 제공하는 것 같습니다. C : \ Windows \ System32 \ OpenSSH 폴더를 제거하고 git의 ssh.exe를 PATH에 추가해야했습니다.
— Shukri Adams

이것은 C를 사용하여, 나를 위해 그것을 "고정": \ 프로그램 파일 \ 힘내 \가 빈 \ C로 ssh.exe 작품 \를 USR : \ WINDOWS \ SYSTEM32 \ OpenSSH를이 \ ssh.exe가되지 않습니다
— smartins

3

jsut 2가 필요합니다.

1) 상속 비활성화 여기에 이미지 설명을 입력하십시오

2) 상속 된 권한을 명시 적 권한으로 변환 여기에 이미지 설명을 입력하십시오

3) 사용자 그룹 제거 여기에 이미지 설명을 입력하십시오

4) 사용자는 개인 파일에 액세스 할 수 없으므로 id_rsa를 추가하기에 충분해야합니다. 여기에 이미지 설명을 입력하십시오


2

비슷한 문제가 있었지만 직장에 있었고 직장 컴퓨터에서 파일 권한을 변경할 수 없습니다. WSL 을 설치 한 다음 키를 WSL의 숨겨진 ssh 디렉토리에 복사하십시오.

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

이제 권한을 정상적으로 수정할 수 있습니다.

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

그런 다음 WSL을 사용하여 ssh를 사용하십시오.

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

chmod 대신 Windows에서 icacl을 사용하여 파일 권한을 조정할 수 있습니다. 현재 사용자에게 읽기 권한을 부여하고 다른 모든 것을 제거하려면

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

0

이것은 @ JW0914의 CLI 답변에 대한 스크립트 버전이므로 맨 먼저 그를 찬성하십시오. 또한 첫 번째 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 $_
}


-1

iBug의 답변이 제대로 작동합니다! 이를 따라이 문제를 제거 할 수 있습니다.

그러나 권한을 설정하는 동안 문제가 발생하여 해결해야 할 사항이 거의 없으며 문제를 파악하는 데 몇 분이 걸렸습니다!

iBug의 답변에 따라 모든 권한을 제거하지만 모든 권한을 자신에게 어떻게 설정합니까? 그 방법을 몰랐기 때문에 처음에 갇힌 곳입니다.

상속을 비활성화하면 허용 된 모든 사용자 또는 그룹을 삭제할 수 있습니다.

일단 그렇게하면

을 클릭 Add한 후 클릭 Set a Principal입력 후 System와 Administrators와 your email addredd하단에있는 필드에서 다음 클릭 check names.

사용자가 존재하면 이름을로드합니다. 그런 다음 OK> 유형 Allow> 기본 권한 Full Control>을 클릭하십시오.Okay

SYSTEM, 관리자 및 사용자에게 모든 권한을 설정합니다.

그런 다음 해당 키를 사용하여 ssh를 시도하십시오. 이제 해결해야합니다.

나는 같은 문제가 있었고이 방법을 사용하여 해결했습니다. 해당 이름을 가진 사용자 또는 그룹이있는 경우 해당 이름을로드합니다.

-스크린 샷-

권한 항목 교장 선택 / 사용자 또는 그룹 선택

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.