puttygen.exe
(클라이언트는 Windows 8)을 사용하여 키 쌍을 만들었습니다 . 서버 (Ubuntu 12.04.3 LTS)에서 공개 키를 ~/.ssh/authorized_keys
. 공개 키는 다음과 같습니다.
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAopfM6RHOgnuc4Aftn3t4k5UIAT3StCAbn/vg/IMbphbXadshC+79sIlRq3P4zGzMjFTP4hKnzu6ehLV5lmj/qorq3SKT+bPO5Qrac3VbIlrGvuBFDDjP82I2Hwg3HzlsFTstqk++KToapaTYZ7jENEYyPl2wnzITJnt//+4U1o6juoXTKgdNE02hHnRZyHOV/bnkZyJJCEwJv5U0eXSThQnhmXtUxGT8U0HQNFiXfqIIVllhWiCnyrhhIaKz/CIJNAd2VmzyJzQtJtTQX8aWSNVrZju6Sv2/RncTNvsACdNgjjh/FH8PQXaep00jlJ3MOdsC8vz6VSPFbh6iKy1oLQ== rsa-key-20131231
따라서 정확합니다 (한 줄, 주석 없음, ssh-rsa 등으로 시작)
.ssh
dir 권한 수준은 700이고 authorized_keys 파일 권한은 600입니다. 로그인을 시도하는 실제 사용자가 소유 한 디렉터리와 파일입니다.
연결을 시도 할 때 'server refused our key'
서버가 비밀번호를 요청합니다. 그게 다야. /var/log/auth.log
키로 로그인을 시도 할 때 아무것도 기록되지 않습니다 .
나는 모든 곳을 보았고 모든 기사와 팁은 파일 / 디렉토리에 대해 chmod 600 및 700을 설정하고 키를 올바르게 형식화하는 것에 대해 언급합니다. 나는이 모든 것을 여전히 ‘우리의 열쇠를 거부했습니다’라는 오류를 받고 있으며 아이디어가 없습니다.
답변
좋아요, 내 키에 작은 오타가 있습니다. 파일에 붙여 넣을 때 첫 번째 문자가 잘리고 ssh-rsa 대신 sh-rsa로 시작했습니다.
nrathathaus-귀하의 답변은 매우 도움이되었습니다. 감사합니다.이 답변은 귀하에게 감사드립니다. 🙂 나는 당신이 말한 것처럼 sshd_conf에 설정했습니다.
LogLevel DEBUG3
로그를 살펴보면 sshd가 키를 올바르게 읽지 만 잘못된 식별자로 인해 거부한다는 것을 깨달았습니다.
답변
다른 답변으로 몇 가지 생각을 추가하면 도움이되었지만 정확히 맞지 않았습니다.
먼저 수락 된 답변에서 언급했듯이
/etc/ssh/sshd_config
로그 수준을 설정합니다.
LogLevel DEBUG3
그런 다음 인증을 시도하고 실패하면 로그 파일을 찾습니다.
/var/log/secure
찾고있는 오류가 있습니다.
답변
제 경우에는 / home / user의 권한도 0755에서 0700으로 변경해야했습니다.
답변
제 경우에는 권한 문제입니다.
로그 수준을로 변경 DEBUG3
했는데 /var/log/secure
다음 줄이 표시됩니다.
Authentication refused: bad ownership or modes for directory
Googled와이 게시물을 찾았습니다.
https://www.daveperrett.com/articles/2010/09/14/ssh-authentication-refused/
chmod g-w /home/your_user chmod 700 /home/your_user/.ssh chmod 600 /home/your_user/.ssh/authorized_keys
기본적으로 다음과 같이 알려줍니다.
- 그룹을 없애다
w
사용자 홈 디렉토리 권한 - 로 변경 허가
700
의.ssh
디렉토리 - 파일
600
의 권한을 변경authorized_keys
하십시오.
그리고 그것은 작동합니다.
또 다른 것은 루트 로그인을 활성화해도 root
작업을 할 수 없다는 것입니다. 다른 사용자를 사용하는 것이 좋습니다.
답변
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
명령 프롬프트에서 실행하는 경우 현재 사용자 만 나열되어야합니다 (읽기 허용, 쓰기 거부).
답변
나는 성공하지 않고 인터넷을 수색하는 데 시간을 보냈던 나와 같은 모든 사람을 돕기 위해이 답변을 추가하고 있습니다.
홈 폴더가 암호화 될 수 있습니다.
또는 “authorized_keys”파일이 중첩 된 폴더입니다. 저에게 많은 시간을 절약 할 수 있었을 것입니다. 확인하려면 수행하십시오
ls -A
암호화 상태를 확인하려는 디렉토리에 있습니다. 폴더에 “.encryptfs”라는 폴더가 포함되어 있으면 해당 폴더가 암호화됩니다. 이로 인해 확인에 필요한 공개 ssh 키가 포함 된 “authorized_keys”파일에 액세스 할 수 없습니다.
이를 수정하려면 암호화가 포함되지 않은 디렉토리 트리에 “authorized_key”파일을 배치하십시오.
답변
내가 찾은 간단한 해결책 authorized_keys
은 숨겨진 .ssh 디렉토리에서 파일 을 옮기고 시스템 ssh 디렉토리에 넣는 것입니다.
/etc/ssh/keys/authorized_keys
이 작업을 수행하자마자 문제없이 작동했습니다.