authorized_keys에 공개 키를 추가해도 ssh를 수행 할 수 없습니다


16

ssh 액세스 권한을 부여하려는 Digital Ocean 드롭 릿이 있습니다. 이전에 무엇을했는지 확실하지 않습니다. Digital Ocean UI를 통해 공개 키를 추가하려고했습니다. 그것은 작동하지 않았다, 나는 계속 받고있다 permission denied (publickey).

Digital ocean console을 통해 서버에 액세스하여 공개 키를 수동으로 추가했습니다 /root/.ssh/authorized_keys. 그런 다음을 사용하여 ssh하려고했습니다 ssh root@x.x.x.x. 작동하지 않습니다 (권한이 거부되었습니다).

그래서 새 사용자를 추가하려고 시도 하고 디렉토리 자체 및 파일 에 대한 /home/me/.ssh권한 700으로 디렉토리를 작성했습니다 . 그런 다음 시도했습니다 . 그것은 작동하지 않았다..ssh600authorized_keysssh me@x.x.x.x

ssh 데몬을 다시 시작해도 아무것도 변경되지 않습니다.

내가 무엇을 놓치고 있습니까?

편집하다:

자세한 ssh 출력은 다음과 같습니다.

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

편집 2 :

LogLevel DEBUG3 산출:

여기에 이미지 설명을 입력하십시오


연결에서 상세 로그, sshd_config의 컨텐츠 및 서버 로그에 ssh와 관련된 가능한 오류를 게시하십시오.
Jakuje

@Jakuje 출력을 추가했습니다 ... 귀하의 의견을 전에는 눈치 채지 못했습니다.
Jeff

키가 거부되었습니다. (아마도에 가능한 문제에 대한 서버 로그 확인 LogLevel DEBUG3에를 sshd_config). 나는 이것이 권한 문제라고 생각하지만 몇 가지 이유가있을 수 있습니다.
Jakuje

그것은 말한다[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
Jeff

certified_keys 파일의 권한은 무엇입니까? ls -ld ~ ~/.ssh ~/.ssh/authorized_keys? 서버에서 자세한 로그를 작성하려면 위에서 언급 한 파일을 수정하고 ssh 서비스를 다시 시작한 후 다시 연결하고 로그를 게시하십시오 auth.log.
Jakuje

답변:


20

클라이언트 구성

설정 ~/.ssh/config

호스트 항목을 설정하는 ssh것은 정말 쉽고 많은 문제를 줄여줍니다. 예를 들면 다음과 같습니다.

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

예, 우리는 설정에서 digitaloceanboxgithub그리고 github.com우리는 다음과 같은 명령을 할 수있는 :

  1. ssh github
  2. ssh digitaloceanbox

구성 파일에 지정된 것과 다른 사용자로 로그인 user@하려면 시작 부분에 넣으 십시오.

  • ssh user@digitaloceanbox

ssh키 생성

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

메시지가 표시되면 생성하려는 개인 키의 전체 경로를 지정했습니다 ssh-keygen. 또한 -C원격 컴퓨터에서 키를 쉽게 식별 할 수 있는 주석 ( )을 정의했습니다 .

두 개의 파일이 생성됩니다 :

  1. .ssh/digitalocean-rsa
    • 개인 키. 이것을 공유하지 마십시오 .
  2. .ssh/digitalocean-rsa.pub
    • 공개 키. 이것은 인증하기 위해 서버에 저장하는 것입니다.

ssh키 를 제공 할 때 .pub버전 인지 확인하십시오 !! 에 ~/.ssh/config추가 할 때 시스템에 추가 한 공개 키와 일치하는 올바른 개인 키를 추가하십시오.


서버 구성

대부분의 설치에는 공개 키 인증이 사용됩니다. 그러나 모든 일을 시작하면, 몇 가지 문제가 발생할 수 있습니다. OP가 문제가있는 곳에서 OP는 /root/.ssh/다시 시작할 디렉토리를 삭제하는 것이 좋습니다 .

ssh원격 시스템의 루트 사용자에 액세스하는 데 사용하지 않는 것이 좋습니다 . ssh다른 사용자에게 로그인 한 다음 비밀번호 ( sudo su -)를 사용하여 루트로 이관하는 것이 좋습니다 .

를 사용하여 호스트에 키 추가 ssh-copy-id

다른 사용자를 작성 ssh하여 해당 사용자 또는 루트 사용자로 사용하기 로 결정했는지에 관계없이 다음은 ssh서버에 키를 배치하는 권장 방법입니다 .

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

이를 통해 sshd필요한 권한으로 필요한 디렉토리와 파일을 만들 수 있습니다 . 따라서 권한을 엉망으로 만들거나 세부 정보를 기억할 필요가 없습니다. 도구를 사용하여 키를 업로드하십시오.

비밀번호 인증 비활성화

즉, 키를 입력하고 키를 사용하여 연결할 수 있는지 확인한 후에는 비밀번호 인증을 비활성화 sshd하고 서비스를 다시 시작하는 것이 좋습니다 .

  1. 편집하다 /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

신규 사용자는 어떻습니까?

암호 인증을 비활성화하면 새로운 사용자를 어떻게 키울 수 있습니까? 한 가지 방법은 템플릿 파일을 /etc/skel디렉토리 에 추가하는 것 입니다. 한 명의 사용자를 키한 후에는 다음을 수행하십시오.

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. /etc/skel/.ssh/새로 작성된 모든 사용자에 대해 자동으로 키를 입력하지 않는 한 파일을 비워 두도록 파일을 편집하십시오 .

로 새 사용자를 만들면 sudo useradd -m newuser해당 사용자는 .ssh/authorized_keys을 (를) 편집 할 수 있으며 적절한 권한을 갖습니다.

디버깅

sshd로그 파일을보고 연결이 실패하거나 거부되는 이유를 확인할 수 있습니다 .

  1. sudo tail -f /var/log/auth.log

이 명령을 실행하는 동안 다른 터미널을 사용하여 로그인을 시도하십시오. 여러 번 제공된 메시지는 문제를 정확히 찾아 내거나 온라인에서 해결책을 찾을 수있을 정도로 충분합니다.


1
디버깅 단계가 나를 위해 일했습니다. 루트 디렉토리는 (필요한 700 예정) 잘못된 권한을 가지고 있었다
naisanza

12

Ssh는 ssh 키를 사용한 소유권, 파일 및 디렉토리 권한에 대해 상당히 까다 롭습니다.

~ / .ssh /는 소유자가 소유해야하며 700 개의 권한이 있어야합니다. ~ / .ssh / authorized_keys는 소유자가 소유해야하며 600 개의 권한이 있어야합니다.

따라서 루트의 경우 :

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

사용자 나를 위해 :

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

그런 다음 다시 시도하십시오.

물론 / etc / ssh / sshd_config에서 root가 전혀 로그인 할 수 있는지 또는 ssh 키로 로그인 할 수 있는지 확인해야합니다.

당신이 가지고 있다면 :

PasswordAuthentication no

그런 다음 설정할 수 있습니다 :

PermitRootLogin yes

그런 다음 sshd를 다시 시작하십시오.

/etc/init.d/sshd restart

다시 시도하십시오.

ssh를 사용하면이를 위해 ssh 세션을 사용할 때도 sshd 데몬을 다시 시작할 수 있습니다 .Openssh는이를 처리하도록 설계되었습니다.

업로드 한 로그 파일 스 니펫을 보면 MacOSX를 사용하고있는 것 같습니다. 거기에 새로운 ssh 키를 만들 수 있습니까?

또한 과거에 로컬 컴퓨터에 사용자 용 개인 ssh 키가 둘 이상있을 때 ssh로 원격으로 로그인 할 수없는 경우가 있음을 알게되었습니다. 이 문제를 해결하기 위해 ~ / .ssh / config 파일의 로컬 컴퓨터에 항목을 만드는 데 큰 도움이되었습니다. 예를 들면 다음과 같습니다.

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

그런 다음 로컬 컴퓨터의 명령 줄에서 시도하십시오.

ssh -v my-vps

ssh 키를 사용하고 일부 다른 로그인에 ssh 키를 사용하지 않는 경우 ssh 키가있는 항목 외에도 ~ / ssh / config 파일에서 ssh 키를 사용하지 않는 ssh 로그인을 정의 할 수 있습니다.

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

이것은 나를 위해 잘 작동합니다. 명령 행에서 사용할 키를 정의 할 수도 있습니다.

ssh -v root@10.111.111.254 -i .ssh/id_rsa

이렇게하면 디버깅이 쉬워 질 수 있으며 명령 줄에서는 항상 로컬 컴퓨터에서 작동해야합니다.


이 솔루션 이외에도 SSH가 작동하도록하려면 홈 폴더에 대한 권한도 변경해야했습니다.sudo chmod 700 /home/me/
Rg90

당신은 생명의 은인, @ albert-j! IdentityFile라인은 1 시간의 틀에 박힌 생각을 얻었다.
zev

4

ssh 데몬 구성 (에 있어야 함 /etc/ssh/sshd_config)을 다시 확인하고 다음을 확인하십시오.

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

또한 구성 파일을 확인하여 AllowUsers 또는 AllowGroups 가 각각 사용자 및 그룹에 대한 화이트리스트 역할을하도록 설정 되어 있는지 확인하십시오 .

또한 루트 사용자에게 키를 추가하려고합니다. 기본적으로 루트 로그인은 비활성화되어 있어야하지만 PermitRootLogin 필드 를 통해이를 변경할 수도 있습니다 .


이것들 중 Permission denied (publickey)
Jeff

3

연결 한 로그에 따르면 클라이언트 측에서 개인 키 파일을 찾지 못하는 문제가 있다고 생각 합니다.

  • 먼저 파일 ~/.ssh/id_rsa이 로컬 컴퓨터에 존재하고 올바른 파일인지 확인하십시오 (더 많은 경우).

  • 확인 .ssh폴더 권한을 (해야 drwx------실행하지 않을 경우 sudo chmod 700 ~/.ssh) 및 내용 (수 있어야 -rw-------실행하지 않을 경우 sudo chmod 600 ~/.ssh/*) . 원격 시스템에도 동일한 권한을 적용하십시오.

또한 원하는 개인 키를 사용하여 강제로 시도 ssh하여 -i매개 변수 와 함께 직접 제공 할 수 있습니다 .

  • 다음과 같은 것을 실행할 수 있습니다.

    ssh -i /path/to/your/private-key root@X.X.X.X

    또는

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

ssh 맨 페이지 ( man ssh터미널에서 실행) 에 대한 자세한 정보를 얻을 수 있습니다 .

또한 root사용자 로 로그인하려는 경우 , 로그인하기 전에 루트 계정을 활성화해야하며이를 통해 암호를 생성 sudo passwd root하거나 서버 관리 도구를 사용해야합니다 (Ubutntu는 기본적으로 루트 계정이 비활성화되어 있음) . Ubuntu Wiki 에서 자세한 정보를 얻을 수 있습니다 .

도움이 되길 바랍니다.


3

다시 설치 openssh-server하여 문제를 해결했습니다. 주어진 솔루션은 모두 훌륭하지만 나에게는 효과가 없었습니다. 무엇이 문제의 원인인지 전혀 몰랐지만 이전 개발자가 구성을 엉망으로 만들었을 것입니다.

내 것과 같은 특정 문제가있는 사람이있을 것 같지 않습니다. 그러나 Digital Ocean 드롭 릿이 있고 SSH 액세스가 불가능하고 제공된 솔루션이 작동하지 않으면 Digital Ocean 콘솔을 통해 이러한 명령을 실행하여 SSH 서버를 다시 설치하십시오. 이는 파괴적인 과정이므로/etc/ssh/.ssh 디렉토리가 아닌 기존 구성 파일이 지워 집니다.

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

ssh 클라이언트 / 키가 순서대로 있다고 가정하면 서버에 SSH로 연결할 수 있어야합니다.


1

이 문제는 Digital Ocean에서 데비안 이미지를 사용하여 나에게 나타났습니다. 어쨌든 간단한 설정 과정에서 루트 암호를 설정했을 때의 소유자 /root가 user로 변경되었습니다 debian. 나는 다음을 보았다 /var/log/auth.log:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

단순히 실행 chown root:root -R /root하면 문제가 해결되었습니다.

HTH


0

매우 비슷한 문제가있었습니다. 이것은 나를 위해 일했다- / etc / ssh / sshd_config 에이 줄을 추가하십시오

AuthorizedKeysFile %h/.ssh/authorized_keys 

그런 다음 일반적인 방법으로 ssh를 다시 시작하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.