서버에 공개 키를 등록한 후 비밀번호를 묻는 메시지 표시 [닫기]

서버에 공개 키를 등록한 후 비밀번호를 묻는 메시지 표시 [닫기]

참고: 이는아니요인기 있는 질문과 중복됩니다. 공개 키 인증을 사용할 때 SSH 비밀번호 프롬프트가 계속 표시되는 이유는 무엇입니까?

원본 기사가 있지만 도움이 될만한 답변을 많이 얻지 못했습니다. 3일간의 문제를 자세히 설명하려고 노력하겠습니다.

Ubuntu 서버에 id_rsa.pub SSH 키를 어떻게 추가합니까?

내가 한 일은 일반 Windows 10 컴퓨터에서 git scm 터미널을 통해 생성한 것입니다(여기에서 찾을 수 있습니다).https://git-for-windows.github.io/). Windows 10의 일반 cmd 프롬프트가 작동하지 않아서 git을 사용해야 했습니다. ssh-keygen을 통해 생성했고 id_rsa와 id_rsa.pub라는 2개의 키가 생성되었습니다.

그 후 Putty 터미널에 들어가서 원격 서버에 로그인하고 /home/superjohnny 폴더(내 sudo 사용자)에 .ssh 디렉터리를 생성하고 .ssh 폴더 안에authorized_keys라는 폴더를 생성했습니다. id_rsa.pub 키를authorized_keys 폴더에 복사하여 붙여넣고 chmod 600 .ssh/authorized_keys를 수행하여 600 권한을 추가했습니다.

이 작업을 수행한 후 /etc/ssh/sshd_config로 이동하여 구성 설정에 다음을 추가했습니다.

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile %h/.ssh/authorized_keys

이 줄도 모두 주석 처리되지 않았습니다. 그런 다음 sudo service ssh restart를 수행했지만 로그인을 시도할 때 여전히 비밀번호 프롬프트가 나타납니다. 이게 일주일 동안 계속됐어

내가 시도한 것: 나는 답변을 얻기 위해 위에서 논의한 두 가지 스레드를 사용했으며 Google 검색도 광범위하게 사용했습니다. 제가 사용한 방법은 다음과 같습니다.

1. 키를 한 줄에 입력하세요 내 컴퓨터의 git scm 터미널에서 다음 명령을 사용해 보았습니다.

    cat ~/.ssh/id_rsa.pub | awk '{print}' ORS=' '

위 명령은 복사할 때 키가 이미 한 줄에 있기 때문에 아무 작업도 수행하지 않는 것으로 추정됩니다. 터미널에서는 키를 수용할 수 없습니다. 이것은 내가 명령을 찾는 데 사용한 스레드입니다. https://stackoverflow.com/questions/36818651/how-to-display-output-on-single-line

  1. wc 명령을 사용하십시오. 다음 명령을 사용하십시오.

    wc ~/.ssh/authorized_keys
    

    내가 얻는 결과는 다음과 같습니다.

      1   3 398 /home/superjohnny/.ssh/authorized_keys
    
  2. 내 홈 디렉터리가 암호화되어 있는지 확인하세요. 다음 명령을 사용했습니다.

    ls -A /home/superjohnny
    

    나는 다음과 같은 결과를 얻었습니다.

    .bash_history  .bash_logout  .bashrc  .cache  .profile  .ssh  .viminfo
    

    .encrypted 폴더를 찾을 수 없습니다.

  3. 추가 정보를 조사하려면 디버그 모드로 들어가십시오. 세션에서 다음 명령을 실행했습니다.

    ssh -v superjohnny@myip
    

결과는 다음과 같습니다.

    debug1: Found key in /home/superjohnny/.ssh/known_hosts:1
    debug1: ssh_ecdsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey,password
    debug1: Next authentication method: publickey
    debug1: Trying private key: /home/superjohnny/.ssh/id_rsa
    debug1: Trying private key: /home/superjohnny/.ssh/id_dsa
    debug1: Trying private key: /home/superjohnny/.ssh/id_ecdsa
    debug1: Trying private key: /home/superjohnny/.ssh/id_ed25519
    debug1: Next authentication method: password

이것은 분명히 뭔가에 대한 힌트이지만 한동안 웹을 탐색한 후에 이 문제에 대한 많은 정보를 찾을 수 없었고 여기에서 이에 대한 스레드를 하나만 찾았습니다.https://askubuntu.com/questions/54670/passwordless-ssh-not-working 이 헤더는 이미 수행한 키 파일을 다시 생성하라는 메시지를 표시합니다.많은이류

  1. grep 명령을 사용하십시오. 다음 명령을 사용하십시오.

    grep -v '^[[:space:]]*$' ~/.ssh/authorized_keys | wc -l
    

    내가 얻는 결과는 다음과 같습니다.

    1
    
  2. 로그 메시지를 확인하세요. 다음 명령을 사용하십시오.

    sudo vi /var/log/auth.log
    

    같은 날 같은 오류로 인해 많은 오류가 발생했지만 그 중 몇 가지만 게시하겠습니다.

     Apr 25 04:14:01 ramnode CRON[977]: pam_unix(cron:session): session    closed for user root
    Apr 25 04:54:01 ramnode CRON[1076]: pam_env(cron:session): Unable to open env file: /etc/default/locale: No such file or directory
    

    4월 25일 외에는 다른 날에는 어떤 메시지도 받지 못했습니다.

  3. sshd를 사용하여 디버그 모드로 들어갑니다.

행위

    /usr/sbin/sshd -d

나에게 출력을 제공합니다 :

    debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
    debug1: could not open key file '/etc/ssh/ssh_host_rsa_key': Permission denied
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    debug1: could not open key file '/etc/ssh/ssh_host_dsa_key': Permission denied
    Could not load host key: /etc/ssh/ssh_host_dsa_key
    debug1: could not open key file '/etc/ssh/ssh_host_ecdsa_key': Permission denied
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    debug1: could not open key file '/etc/ssh/ssh_host_ed25519_key': Permission denied
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    debug1: setgroups() failed: Operation not permitted
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-d'

그러나 다음과 같이 명령 앞에 sudo를 추가하십시오.

    sudo /usr/sbin/sshd -d

나에게 출력을 제공합니다 :

    debug1: sshd version OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
    debug1: key_parse_private2: missing begin marker
    debug1: read PEM private key done: type RSA
    debug1: private host key: #0 type 1 RSA
    debug1: key_parse_private2: missing begin marker
    debug1: read PEM private key done: type DSA
    debug1: private host key: #1 type 2 DSA
    debug1: key_parse_private2: missing begin marker
    debug1: read PEM private key done: type ECDSA
    debug1: private host key: #2 type 3 ECDSA
    debug1: private host key: #3 type 4 ED25519
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-d'
    Set /proc/self/oom_score_adj from -800 to -1000
  1. 홈 디렉토리 권한이 더 작아야 하는지 확인하십시오. .ssh 디렉토리가 작동하지 않을 수도 있다고 생각하여 홈 디렉토리 권한을 변경해 보았습니다. 다음 명령을 사용했습니다.

    chmod 755 ~/
    

    그러나 sudo service ssh restart를 사용하여 터미널을 다시 시작하면 전혀 효과가 없으며 다른 터미널에 다시 로그인하면 여전히 비밀번호를 묻는 메시지가 표시됩니다.

  2. 비밀번호를 비활성화해 보세요. 비밀번호를 비활성화하고 분리된 상태를 종료하지 않으려고 시도했지만 그래도 작동하지 않으면 변경할 수 있습니다. 나는 다음을 통해 입장한다

    /etc/ssh/sshd_config 
    

    하지만 새 터미널 화면에 들어가면 다음 오류가 발생합니다.

    Disconnected: No supported authentication methods avaliable(server sent: publickey
    

시스템이 SSH 키를 사용하려고 비밀번호 로그인을 비활성화하려고 하면 다음과 같은 /var/log/auth.log 메시지가 나타납니다.

    May  1 09:02:00 ramnode sshd[16905]: error: Received disconnect from 64.121.77.168: 14: No supported authentication methods available [preauth]
    May  1 09:02:13 ramnode sudo: superjohnny : TTY=pts/1 ; PWD=/home/superjohnny ; USER=root ; COMMAND=/usr/bin/vi /var/log/auth.log
    May  1 09:02:13 ramnode sudo: pam_unix(sudo:session): session opened for user root by superjohnny(uid=0)

답변1

나는 내 질문에 대해 인내심을 갖고 기다려준 아주 좋은 친구의 도움으로 답을 찾았습니다. 문제는 Putty 클라이언트가 내 키를 허용하도록 설정되어 있지 않다는 것입니다. 인증된 키 파일과 모든 권한이 있지만 지금까지는 이 작은 문제를 발견하지 못했습니다.

내 Putty 클라이언트에서는 개인 키를 분리에 넣지 않았습니다. 처음에는 원격 서버가 내 파일을 보고 키가 있는지 확인할 것이라고 생각했습니다. 내 생각은 틀렸습니다. 내 친구는 이것이 보안에 큰 위험이 될 것이며 개인 키를 다음과 같이 퍼티에 넣어야 한다고 말했습니다.

여기에 이미지 설명을 입력하세요.

도움을 주셔서 감사합니다. 이 문제를 해결하는 과정에서 많은 것을 배웠습니다.

관련 정보