Windows 8.1을 실행하면 server refused our key
문제가 발생했습니다.
가이드에 따라 : https://winscp.net/eng/docs/guide_windows_openssh_server
Windows 로그인 username
및 password
. 그러나, 인증하는 username
A의 결합 private key
응답이었다server refused our key
.
공개 키와 함께 작동하도록하는 것은 파일에 대한 권한으로 내려졌습니다 .
C:\ProgramData\ssh\administrators_authorized_keys
이것은 유용한 페이지입니다 : https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
두 OpenSSH의 서비스를 중지, 다음을 열고 command prompt
함께admin permissions
. 그런 다음 다음을 실행하십시오.
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
참고 : 그렇지 않으면 sshd
불평 하는 exe의 전체 경로를 지정하십시오 . 이렇게하면 일회성 연결 리스너가 생성됩니다. 그만큼-ddd
레벨 3 장황.
연결 후 로그를 스캔하면 다음과 같은 내용이 표시됩니다.
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys':
No such file or directory
파일을 만들어야했습니다. 텍스트를 여기에 C:\ProgramData\ssh\administrators_authorized_keys
복사합니다 public key
. 예 : ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
그런 다음 파일을 저장합니다. 나는으로 파일을 저장 UTF-8
와 BOM
. 테스트하지 않음ANSI
.
그런 다음 일회성 명령 줄을 다시 실행하면 로그에 다음과 같이 표시됩니다.
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
Authentication refused.
S-1-5-11
에 주어진 이름 System
입니다.
을 수정하려면 파일을 Bad permissions
마우스 오른쪽 버튼으로 클릭하고으로 이동 한 다음 버튼을 클릭하고 상속 된 권한을 제거합니다. 그런 다음 모두 삭제 Windows 로그인 이름을 제외하고, 예를 들면 :
그에 대한 권한이 있어야합니다 , 다른 모든 선택하지 않은 것입니다. 파일의 소유자도administrators_authorized_keys
Security Tab
Advanced
Group or user names:
YourMachineName\username
username
Read Allow
Write Deny
YourMachineName\username
이것은 문제를 해결했습니다.
기타 유용한 링크 :
https://github.com/PowerShell/Win32-OpenSSH/releases 에서 OpenSSH-Win32.zip을 다운로드합니다.
WinSCPnet.dll을 사용하여 OpenSSH 서버에 연결하는 방법에 대한 C # 예제 : https://winscp.net/eng/docs/library#csharp
다음은 다음을 사용하여 연결하는 코드 스 니펫입니다 WinSCPnet.dll
.
static void WinSCPTest() {
SessionOptions ops = new SessionOptions {
Protocol = Protocol.Sftp,
PortNumber = 22,
HostName = "192.168.1.188",
UserName = "user123",
//Password = "Password1",
SshHostKeyFingerprint = @"ssh-rsa 2048 qu0f........................ddowUUXA="
};
ops.SshPrivateKeyPath = @"C:\temp\rsa-key-20190505.ppk";
using (Session session = new Session()) {
session.Open(ops);
MessageBox.Show("success");
}
}
교체 SshHostKeyFingerprint
및 SshPrivateKeyPath
자신의 값.
편집 : administrators_authorized_keys 파일 권한의 스크린 샷 추가 :
때 OpenSSH SSH Server
서비스로 실행되고, 만 System
있는 권한이 있어야합니다. 그러나 sshd.exe
명령 프롬프트에서 실행하는 경우 현재 사용자 만 나열되어야합니다 (읽기 허용, 쓰기 거부).