programing tip

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

itbloger 2020. 10. 17. 10:03
반응형

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작업을 할 수 없다는 것입니다. 다른 사용자를 사용하는 것이 좋습니다.


나는 성공하지 않고 인터넷을 수색하는 데 시간을 보냈던 나와 같은 모든 사람을 돕기 위해이 답변을 추가하고 있습니다.

홈 폴더가 암호화 될 수 있습니다.

또는 "authorized_keys"파일이 중첩 된 폴더입니다. 저에게 많은 시간을 절약 할 수 있었을 것입니다. 확인하려면 수행하십시오

ls -A

암호화 상태를 확인하려는 디렉토리에 있습니다. 폴더에 ".encryptfs"라는 폴더가 포함되어 있으면 해당 폴더가 암호화됩니다. 이로 인해 확인에 필요한 공개 ssh 키가 포함 된 "authorized_keys"파일에 액세스 할 수 없습니다.

이 문제를 해결하려면 암호화가없는 디렉터리 트리에 "authorized_key"파일을 배치합니다.


내가 찾은 간단한 해결책 authorized_keys은 숨겨진 .ssh 디렉토리에서 파일 을 옮기고 시스템 ssh 디렉토리에 넣는 것입니다.

/etc/ssh/keys/authorized_keys

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


Windows Server 2008 r2에서 동일한 문제가 발생하고 해결하기 위해 많은 것을 탐색 한 후 마침내 다음과 같이 해결했습니다.

텍스트 패드 또는 다른 텍스트 편집기로 C : \ Program Files (x86) \ OpenSSH \ etc \ sshd_config를 엽니 다.

다음 줄에서 주석을 제거하면 다음과 같이 표시됩니다.

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

그것을 저장하고 지금 개인 키로 로그인하십시오. 즐기세요.


nrathaus 덕분 /var/log/auth.log에 디버그 수준에 대한 조사는 다음과 같습니다.

또 다른 이유는 홈 디렉토리가 755와 다른 권한을 가질 수 있기 때문입니다.


오늘이 문제가 발생했고 파일에서 공개 키를 복사 할 때 새 줄 문자도 포함된다는 문제가있었습니다. vim에서 ": set list"를 사용하여 숨겨진 새 줄을 모두보고 마지막 줄을 제외한 모든 새 줄을 삭제할 수 있습니다. 또한 내 키는 처음에 "ssh-rsa"가 누락되었습니다. 그것도 가지고 있는지 확인하십시오.


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명령 프롬프트에서 실행하는 경우 현재 사용자 만 나열되어야합니다 (읽기 허용, 쓰기 거부).


Windows Server에서이 오류를 수신하는 사람들에게 동일한 오류가 발생했으며 이는 사용자 계정 문제였습니다. 많은 조직에서 관리자를위한 그룹 정책은 SSH 서버 및 연결 설정을 허용하지 않을 수 있습니다. 이러한 유형의 설정에서는 로컬 관리자 계정에서 수행해야합니다. 공개 키에 오타가 없음을 확인한 경우 살펴볼 가치가 있습니다.


제 경우에는 Centos6.6에서 SELinux를 비활성화해야 작동합니다. :)

/ etc / selinux / config를 편집하고 다음을 설정 한 후 호스트를 재부팅하십시오.

selinux=disabled

BTW ... 문제를 식별하기 위해 LogLevel = DEBUG3을 설정해야한다는 것을 언급하는 것을 잊었습니다.


solaris에서 동일한 오류가 발생했지만 /var/adm/splunk-auth.log에서 다음을 발견했습니다.

sshd: [auth.debug] debug1: PAM conv function returns PAM_SUCCESS
sshd: [auth.notice] Excessive (3) login failures for weblogic: locking account.
sshd: [auth.debug] ldap pam_sm_authenticate(sshd-kbdint weblogic), flags = 1
sshd: [auth.info] Keyboard-interactive (PAM) userauth failed[9] while authenticating: Authentication failed

/ etc / shadow에서 계정이 잠겼습니다.

weblogic:*LK*UP:16447::::::3

"* LK *"부분 제거 :

weblogic:UP:16447::::::3

평소와 같이 authorized_keys와 함께 ssh를 사용할 수 있습니다.


제 경우에는 ( /etc/ssh/sshd_config) :

PermitRootLogin no

로 변경 yes하고 서비스를 다시 시작한 후 정상적으로 들어 왔습니다.


이 문제를 해결했습니다 .puttygen은 타사 소프트웨어로 생성 된 ssh 키는 직접 사용하지 않았으므로 변경해야합니다. 예를 들어 다음과 같습니다.

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7
*******C4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ==
---- END SSH2 PUBLIC KEY ---- 

중간에있는 알파벳 중 일부를 생략하고 *로 대체합니다. 그렇지 않은 경우 StackOverflow에서 코드 형식이 잘못되었다고 알려주었습니다. 게시하지 마십시오。

이것은 puttygen에 의해 생성 된 내 ssh 키입니다.

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAr4Ffd3LD1pa7KVSBDU+lq0M7vNvLp6TewkP7wfvKGWWR7wxA8GEXJsM01FQw5hYWbNF0CDI7nCMXDUEDOzO1xKtNoaidlLA0qGl67bHaF5t+0mE+dZBGqK7jG9L8/KU/b66/tuZnqFqBjLkT+lS8MDo1okJOScuLSilk9oT5ZiqxsD24sdEcUE62S8Qwu7roVEAWU3hHNpnMK+1szlPBCVpbjcQTdiv1MjsOHJXY2PWx6DAIBii+/N+IdGzoFdhq+Yo/RGWdr1Zw/LSwqKDq1SmrpToW9uWVdAxeC4eq1cdJACBPyjqUCoz00r+LqkGA6sIFGooeVuUXTOxbYULuNQ== yourname@hostname

제 경우에는 다음과 같은 일부 댓글을 삭제했습니다.

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20170502"
---- END SSH2 PUBLIC KEY ----

및 추가 ssh-rsa시작 부분에 추가, yourname@hostname마지막에. 참고 : ==마지막에 삭제하지 말고 "yourname"및 "hostname"을 변경해야합니다. 제 경우에는 uaskh@mycomputer, yourname은 vps에 로그인하려는 것입니다.이 모든 작업이 완료되면 공개 업로드 할 수 있습니다. -key uaskh의 가정에 ~/.ssh/authorized_keys의하여 cat public-key >> ~/.ssh/authorized_keys다음은 sudo chmod 700 ~/.ssh sudo chmod 600 ~/.ssh/authorized_keys다음은 수정하려면해야 / 등 / SSH / sshd_config를 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys내 운영 체제가 CentOS는 7,이 anwser 질문에 대한 내 첫 번째 시간입니다, 내가 할 수있는 내 노력을 다할 것입니다, 감사합니다!


psftp와 함께 PUTTYgen 파일을 사용하고 있는데 클라이언트에 대한 새 키를 만들어야 할 때 Windows Server에서이 문제가 발생했습니다. private_key_name의 .ppk 파일과 open_ssh.txt 파일 작업에 대한 연결에 대해 동일한 디렉토리에 있어야합니다.


제 경우에는 nfs의 집이 777이었고 750이 필요했습니다.이 문제가 해결되었습니다.


sshd가 authorized_keys2.

파일을 복사하거나 이름을 바꾸면 문제가 해결되었습니다.

cd  ~/.ssh
sudo cat authorized_keys >> authorized_keys2

추신 : Windows에서 Putty를 사용하고 있으며 키 쌍 생성에 PuTTyKeygen을 사용했습니다.


Mobaxterm을 통해 로그온하려고 할 때 비슷한 문제가 발생했습니다. 개인 키는 puttygen을 통해 생성되었습니다. 제 경우에는 키를 다시 생성하는 것이 도움이되었습니다.


Cpanel을 사용할 때 키가 인증되었는지 확인할 수 있습니다.

SSH 액세스 >> 공개 키 >> 관리 >> 승인 또는 승인 취소.


이 오류가 발생하면 /var/log/secure

오류 : key_read : key_from_blob AA
AAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG + rKz93l7em1BsUBzjHPMsswD

.ppk파일 을 볼 때 puttgen을 통해 키를 생성하면 키에 공간이 있음을 의미합니다 .

AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswD
al74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5
GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBC
gLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqz
xjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5L
VwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ==

그리고 붙여 넣으려고하면 키 읽기 오류가 발생하므로 키를 편집하고 한 줄로 만들어서 시도해보십시오.

이것은 뭔가처럼 보일 것입니다

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoo3PFwX04NFG+rKz93l7em1BsUBzjHPMsswDal74MLaJyhQD0pE23NS1izahbo1sJGnSJu2VJ//zxidSsba6xa6OvmeiKTwCz0E5GMefdGVdpdbTlv99qjBl1+Nw1tDnHIC0+v9XmeZERQfCds9Kp1UivfReoYImntBCgLtNyqRYrSu8csJCt7E1oY8QK6WP1vfYgAQ2taGyS9+g7FHyyf5VY2vH3oWzzbqzxjsSLAv3zEQSm1LzSw9Pvc8iwasFyUMBOPj31CKQYTXyX8KpJTr0Zb7oqMauBE5LVwxZhlcJHbj0FsMbF/+GRjvgexymCi3bHmwGQ6FEADNd0RkhdQ== username@domainname


나를 위해 작동하는 것은 다음과 같습니다.

  • ec2 인스턴스를 중지했습니다.
  • 볼륨 분리
  • 동일한 키를 사용하여 이전 인스턴스에 볼륨을 연결하고 SSH를 수행 할 수있었습니다.
  • 일부 임시 폴더에 볼륨 마운트
  • mount_point / home / ec2-user / .ssh / authorized_keys 디렉토리에서 파일을 확인했습니다.
    • 이상적으로는이 파일에 주요 정보가 있어야하지만이 파일은 비어 있습니다.
  • copied the old instance authorized_keys file to the newly mounted volume
  • unmount the device
  • reattach to the original ec2 instance
  • start it and let it pass the health checks

This time it works for me. But I don't know why it doesn't have my key file information at first when the instance was launched. Check this link too https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingMindTerm


On my case the problem was like this, during the generation of ssh keys I intentionally changed the default directories of the keys. So instead of using the location ~/.ssh/authorized_keys I chose to use ~/home/user/folder1/.ssh/authorized_keys, for these changes to work I was supposed to make the same changes of about the new location on this file /etc/ssh/sshd_config. But until I am realising this I had already tried several solutions suggested by other people here including setting the permission of home folder to 700 and the .ssh directory to 600.


Steps to fix Root mount (That i followed as i changed permission with ec2-user folder and the authorization key file) This process will be similar to detach and attach a pen-drive

Below are some other scenarios you may encounter -

  1. You're using an SSH private key but the corresponding public key is not in the authorized_keys file.
  2. You don't have permissions for your authorized_keys file.
  3. You don't have permissions for the .ssh folder.
  4. Your authorized_keys file or .ssh folder isn't named correctly.
  5. Your authorized_keys file or .ssh folder was deleted.

Steps to fix them

  • Stop the problematic Ec2 instance
  • Detach the root volume (/dev/sda1)
  • Create an ec2 instance or use an running one
  • Mount the detached volume (/dev/sdvf) to new ec2 instance

Now after you login to new ec2 run below steps

  • Lsblk command - list all available mounts
  • Pick the mount value that you unmount from the problematic instance
  • As ec2-user run “sudo mount /dev/mapper/rootvg-home /mnt” sudo mount /dev/mapper/rootvg-home /mnt
  • Then change directory to /mnt
  • Make all necessary changes

Now we have fixed our volume with the issue that we faced. Mostly it could be user permission issue - Umount /mnt to unmounts it - Now go to the console and point to the volume attached to new instance and detach it - After detached, attached it to your new volume as /dev/sda1

With that said you should be able to login successfully


As my experience, I suggest you should generate keys from putty, should not generate from linux side. Because the key will be old PEM format. Anyway, just my suggestion. I did as steps below and worked fine with me and with my team.

  1. Generate a key pair with PuTTYGen.exe on your local (type: RSA, length: 2048 bits).

  2. Save private/public key as "id_rsa.ppk/id_rsa.pub" files on your local.

  3. Create "authorized_keys" file on your local, then enter the public key in "id_rsa.pub" to "authorized_keys". Remember content has to begin with "ssh-rsa" and one line only.

여기에 이미지 설명 입력

  1. Use WinScp (or putty command) to copy "authorized_keys & id_rsa.pub" from your local to your linux-user-home "/home/$USER/.ssh/".

여기에 이미지 설명 입력

  1. Run these commands:

    chmod 700 .ssh

    chmod 600 .ssh/authorized_keys

    chown $USER:$USER .ssh -R

  2. Test your connect setting by load the private key "id_rsa.ppk" in the PuTTY.exe profile, then click open (put your passphrase if have).

여기에 이미지 설명 입력

여기에 이미지 설명 입력


키를 확인하세요. 오늘은 rsa (id_rsa.pub) 키 여야하며 더 이상 dss (id_dsa.pub) 키가 아니어야합니다. puttygen 0.70을 사용하고 생성 할 키 유형에서 RSA를 선택하고 호스트 ~ /에서 공개 키를 교체합니다. ssh / authorized_keys


키를 추가 한 후 ec2-userAmazon Linux 시스템을 사용하는 것처럼 로그인 합니다.


또 다른 이유 파일의 UTF-8 BOM 일 수 있습니다 authorized_keys.

참고 URL : https://stackoverflow.com/questions/20864224/putty-getting-server-refused-our-key-error

반응형