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입력 후 SystemAdministratorsyour email addredd하단에있는 필드에서 다음 클릭 check names.

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

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

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

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

-스크린 샷-

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

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