[ssh] Putty : 서버 가져 오기에서 키 오류를 거부했습니다.

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 로그인 usernamepassword. 그러나, 인증하는 usernameA의 결합 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-8BOM. 테스트하지 않음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_keysSecurity TabAdvancedGroup or user names:YourMachineName\usernameusernameRead AllowWrite DenyYourMachineName\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");
    }
}

교체 SshHostKeyFingerprintSshPrivateKeyPath자신의 값.

편집 : 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

이 작업을 수행하자마자 문제없이 작동했습니다.